Forum Moderators: open

Message Too Old, No Replies

retrieving xml with ajax. xml not well-formed

         

fintan

11:07 am on Apr 28, 2006 (gmt 0)

10+ Year Member



I've a xml file which is generated by php. An example is below.


<staffdetails>
<staffmember id="6e974aeb8bf95559de28e967b42a2882">
<fullname>My full name</fullname>
<workforceID>6e974aeb8bf95559de28e967b42a2882</workforceID>
<employeeNumber></employeeNumber>
<l></l>
<mail>email@somewhere.com</mail>
<mobile>999-999</mobile>
<ou>Unit</ou>
<telephonenumber>999-999</telephonenumber>
<facsimileNumber>999-999</facsimileNumber>
<street>somewhere</street>
<postofficebox></postofficebox>
<physicaldeliveryofficename>somewhere</physicaldeliveryofficename>
</staffmember>
</staffdetails>

Then the basic ajax stuff like setting up the connection and stuff. What I'm having problems with is the responce.


var getStaff = document.getElementById("staff").value;
var XMLResponse = xmlHttp.responseXML;
var staffdetails = XMLResponse.getElementByTagName('staffdetails');

Mainly xmlHttp.responseXML keeps on crapping out on me. Do I have to escape the xml returned? Does something have to be added to responseXML? I keep on getting xml not well formed back. Any help would be appreciated. Thanks

fintan.

Iguana

11:28 am on Apr 28, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



AS you build up the xml in php you need to escape the &<> characters between the tags to &amp; &lt; &gt;

Apart from that, look for errors in your php routine

fintan

12:06 pm on Apr 28, 2006 (gmt 0)

10+ Year Member



Thanks Iguana I just copped that. The xml is returning fine but now I'm getting.
staffmember[i].getElementByTagName is not a function

function updatePage() {
if (xmlHttp.readyState == 4) {
var getStaff = document.getElementById("staff").value;
var XMLResponse = xmlHttp.responseXML;

var staffdetails = XMLResponse.getElementByTagName('staffdetails');

var staffmember = XMLResponse.getElementsByTagName('staffmember');

if(getStaff.length < 3){
document.getElementById("workforceid").value = "";
}
else{

for(i=0; i<=staffmember.length; i++){ //length is the same as count($array)

id = staffmember[i].getAttribute('id'); //Grabs the id attribute.

var fullname = XMLResponse.getElementByTagName('fullname').firstChild.data;
var workforceid = workforceid[i].getElementByTagName('workforceid').firstChild.data;
}
document.getElementById("staffcomplete").innerHTML = fullname;
document.getElementById("workforceid").value = workforceid;
}
}
}

Can you see where I'm going wrong? Thanks

Iguana

12:10 pm on Apr 28, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



In your for loop try

i<staffmember.length

fintan

12:25 pm on Apr 28, 2006 (gmt 0)

10+ Year Member



No joy it's definitely having a problem with

var staffdetails = XMLResponse.getElementByTagName('staffdetails');

Iguana

12:33 pm on Apr 28, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Is getElementByTagName a method?
I can only find reference to getElementsByTagName that returns a Nodelist

fintan

2:19 pm on Apr 28, 2006 (gmt 0)

10+ Year Member



Yeah I got it here

[developer.mozilla.org...]