Hi,

> Inside an onSuccess: if you attempt to reference an non-existant xml element
> using getlelementsbytagname() it throws a catch and prototype takes it upon
> itself to return from the onSuccess instead of returning an "undefined" to
> the calling routine.

Exceptions in Ajax callbacks are routed to the onException handler:
http://api.prototypejs.org/ajax/ajax/request/

> By exiting out of the onSuccess function it A)
> prevents the remainder of the code from being executed;

Right. This isn't a Prototype thing, trying to dereference something
that isn't pointing at anything causes an exception, and exceptions do
that. :-) You can use a try/catch block in your code to handle the
exception gracefully (or test what you're dereferencing first and only
dereference it if it's pointing to something).

> B) can leave the
> browser in an unstable state;

In what way? If that really happens, it's a browser bug and should be
reported to the browser provider. *Nothing* you do in JavaScript
should be able to make a browser unstable.
--
T.J. Crowder
Independent Software Consultant
mail: tj / crowder software / com
web: www / crowder software / com

On Sep 13, 2:55 pm, Phil Petree <phil.pet...@gmail.com> wrote:
> The problem with prototype is:
>
> Inside an onSuccess: if you attempt to reference an non-existant xml element
> using getlelementsbytagname() it throws a catch and prototype takes it upon
> itself to return from the onSuccess instead of returning an "undefined" to
> the calling routine.  By exiting out of the onSuccess function it A)
> prevents the remainder of the code from being executed; B) can leave the
> browser in an unstable state; C) makes it nearly impossible to debug.
>
> On Sat, Sep 11, 2010 at 9:16 PM, Gregory Nicholas <faction.greg...@gmail.com
>
>
>
> > wrote:
> > i have always struggles getting xml in javascript to work consistently
> > across browsers. i usually have stuck to traversing a little more
> > manually than using the getelementsbytagname method:
>
> > <response>
> >  <methodcall>update</methodcall>
> >  <result>
> >    <status></status>
> >    <message></message>
> >  </result>
> > </response>
>
> > var fields = e.responseXML.documentElement.childNodes;
> > var method = fields[0].firstChild.nodeValue;
> > var result = fields[1].firstChild.nodeValue;
> > var status = result.childNodes[0].firstChild.nodeValue;
> > var message = result.childNodes[1].firstChild.nodeValue;
>
> > // or  a for loop:
> > for (var i = 0, total = fields.length; i < total; i++) {
> >  var field = fields[i];
> >  if (field.nodeName == 'result') {
> >    var fieldNodes = field.childNodes;
> >    var status = fieldNodes[0].firstChild.nodeValue;
> >    var message = fieldNodes[1].firstChild.nodeValue;
> >   }
> > }
>
> > On Sep 8, 6:25 am, Phil Petree <phil.pet...@gmail.com> wrote:
> > > Essentially, you have to reference the XML data in node order, if you try
> > to
> > > reference the first node AFTER you have referenced all the other nodes,
> > the
> > > first node gets returned as empty.
>
> > > Take an XML data set defined as:
> > > <data>
> > >   <status>OK</status>
> > >   <record>22</record>
> > >   <userid>bart</userid>
> > >   <date>09/01/2010</date>
> > >   .
> > >   .
> > >   .
> > > </data>
>
> > > ========== THIS WORKS ON THE FIRST DATA NODE ============
> > > // Now, in the javascript on the form do this (and this works fine):
> > > $('ajStatus').value =
>
> > transport.responseXML.getElementsByTagName('status')[0].firstChild.nodeValu
> > e;
>
> > > $('ajRecord').value =
>
> > transport.responseXML.getElementsByTagName('record')[0].firstChild.nodeValu
> > e;
>
> > > $('ajUserid').value =
>
> > transport.responseXML.getElementsByTagName('userid')[0].firstChild.nodeValu
> > e;
>
> > > $('ajDate').value =
>
> > transport.responseXML.getElementsByTagName('date')[0].firstChild.nodeValue;
>
> > > ========== THIS FAILS ON THE FIRST DATA NODE ============
> > > // Turn it around and do this (and the last value will NEVER get set):
> > >  $('ajRecord').value =
>
> > transport.responseXML.getElementsByTagName('record')[0].firstChild.nodeValu
> > e;
>
> > > $('ajUserid').value =
>
> > transport.responseXML.getElementsByTagName('userid')[0].firstChild.nodeValu
> > e;
>
> >  > $('ajDate').value =
>
> > transport.responseXML.getElementsByTagName('date')[0].firstChild.nodeValue;
>
> > > // this will fail!!!
> > >  $('ajStatus').value =
>
> > transport.responseXML.getElementsByTagName('status')[0].firstChild.nodeValu
> > e;
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Prototype & script.aculo.us" group.
> > To post to this group, send email to
> > prototype-scriptacul...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > prototype-scriptaculous+unsubscr...@googlegroups.com<prototype-scriptaculou 
> > s%2bunsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/prototype-scriptaculous?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptacul...@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to