2016-06-06 6 views
0

Könnte mir jemand erklären, warum das folgende Skript nicht funktioniert? Danke ;-)Parsing remote XML-Datei mit jquery

$("#getRate").on("click", function(event) { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
     getRates(xhttp); 
    } 
    } 

    xhttp.open("GET", "http://api.nbp.pl/api/exchangerates/rates/A/EUR/2016-06-02", true); 
    xhttp.send(); 

    function getRates(xml) { 
    var xmlDoc = xml.responseXML; 
    document.getElementById("testRate").innerHTML = xmlDoc.getElementsByTagName("ExchangeRatesSeries")[0].getElementsByTagName("Rates")[0].getElementsByTagName("Rate")[0].getElementsByTagName("Mid")[0].childNodes[0].nodeValue; 
    } 

}); 
+0

Sie haben xhttp object directy übergeben. Sie müssen jedoch xhttp.responseText als Parameter für die getRates-Methode übergeben. –

Antwort

0

Der Code xml.responseXml wird null. Weil in der Anfrage ein Wert in responseText zurückgegeben wird. Wenn Sie möchten, dass responseXml einen Wert hat, müssen Sie den Inhaltstyp "text/xml" definieren. Aktualisiert: Um Cross-Domain zu verhindern, können Sie responseText in json konvertieren. Sie müssen den mittleren Wert und verändert den Code wie unten

function getRates(xml) { 
    var xmlDoc = xml.responseText; 
    var jsonObj = eval('(' + xmlDoc + ')'); 
    document.getElementById("testRate").innerHTML = jsonObj.rates[0].mid; 
} 
+0

Das Objekt scheint nicht bereit zu sein (xhttp.readyState, xhttp.status), aber ich kann das Dokument in meinem Browser öffnen ... http://api.nbp.pl/api/exchangerates/rates/A/ EUR/2016-06-02 – mlattari

0

Es scheint, dass diese Lösung nicht domänenübergreif funktioniert ... ich die Dateien zuerst herunterladen müssen und die sie lokal analysieren. Dann funktioniert das Skript gut.