Hi again,

I should have said that the symptom you report in your original post
is crazy weird. If it's really happening, it (also) looks like a
browser bug. I assume it only happens in one browser.

But I wouldn't have thought it was Prototype. In this code:

// this will fail!!!
$('ajStatus').value =
transport.responseXML.getElementsByTagName('status')
[0].firstChild.nodeValue;

...you're not actually using Prototype for anything other than the `$
('ajStatus')` part (which I'm guessing isn't what's failing), the rest
is pure DOM and JavaScript.

Do you have somewhere you can host a live, working (but minimalist)
example of this problem? It'd be interesting to take a look at.

FWIW -- and good luck,

-- T.J.

On Sep 13, 3:39 pm, "T.J. Crowder" <t...@crowdersoftware.com> wrote:
> 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