Load xml from javascript

后端 未结 3 1097
不思量自难忘°
不思量自难忘° 2021-01-03 14:55

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

相关标签:
3条回答
  • 2021-01-03 15:32

    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

    0 讨论(0)
  • 2021-01-03 15:43
    // 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');
    
    0 讨论(0)
  • 2021-01-03 15:57

    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.

    0 讨论(0)
提交回复
热议问题