Totally new to XML and I\'ve been struggling on this very simple objective for too long (though I can find enough on the internet about it). Just need the values out of this
Your server isn't returning the appropriate Content-Type
header. The responseXML
property only works if the server returns a Content-Type: text/xml
or similar +xml
header.
See Ajax Patterns:
The service just needs to output an XML Content-type header...
From the w3c:
If final MIME type is not null, text/xml, application/xml, and does not end in +xml [...] return null.
If you have no access to the server and can't change the Content-Type
header, use the overrideMimeType
function to force the XMLHttpRequest
to treat the response as text/xml
:
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else { // IE 5/6
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.overrideMimeType('text/xml');
xhttp.open("GET", "pricing.xml", false);
xhttp.send(null);
xmlDoc = xhttp.responseXML;
var uurloon = xmlDoc.getElementsByTagName("uurloon")[0].childNodes[0].text;
var setloon = xmlDoc.getElementsByTagName("setloon")[0].childNodes[0].text
alert('end');
citation: http://blog-rat.blogspot.com/2010/11/xmlhttprequestresponsexml-returns-null.html
// load xml file
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else { // IE 5/6
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", "pricing.xml", false);
xhttp.send(null);
xhttp.onreadystatechange = function(){
if (xhttp.status == "200")
xmlDoc = xhttp.responseXML;
}
var uurloon = xmlDoc.getElementsByTagName("uurloon")[0].childNodes[0].textContent;
var setloon = xmlDoc.getElementsByTagName("setloon")[0].childNodes[0].textContent;
alert('end');
I make a simple test with a file called price.xml:
<?xml version="1.0" encoding="UTF-8"?>
<materials>
<basic>
<uurloon>10</uurloon>
<setloon>100</setloon>
</basic>
<extra>
<geluid>150</geluid>
<ledset>35</ledset>
<strobo>20</strobo>
<laser>50</laser>
</extra>
</materials>
And html with this code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body onload="init()">
<p>Hola</p>
<script>
function init(){
// load xml file
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else { // IE 5/6
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", "price.xml", false);
xhttp.send();
xmlDoc = xhttp.responseXML;
var uurloon = xmlDoc.getElementsByTagName("uurloon")[0].childNodes[0].textContent;
var setloon = xmlDoc.getElementsByTagName("setloon")[0].childNodes[0].textContent;
console.log(uurloon,setloon); //give me "10 100"
}
</script>
</body>
</html>
And in works for me. I think fails for you because you are calling the .text
atribute instead .textContent
.