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-scriptaculous%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