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.