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 <[email protected]> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/prototype-scriptaculous?hl=en.