2016-06-06 6 views
0

Может ли кто-нибудь объяснить мне, почему следующий скрипт не работает? Спасибо ;-)Parsing удаленный файл xml с 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

Вы передали объект xhttp directy.but, вам нужно передать xhttp.responseText в качестве параметра метода getRates. –

ответ

0

Код xml.responseXml будет null. Потому что в запросе он вернет значение в responseText. Если вы хотите, чтобы responseXml имел значение, вы должны определить Content-Type text/xml. Обновлено: чтобы предотвратить перекрестный домен, вы можете преобразовать responseText в json. Вы нуждаетесь в середине значения и изменили свой код, как показано ниже

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

Объект, кажется, не готов (xhttp.readyState, xhttp.status), но я могу открыть документ в своем браузере ... http://api.nbp.pl/api/exchangerates/rates/A/ EUR/2016-06-02 – mlattari

0

кажется, что это решение не работает crossdomain ... Я должен сначала загрузить файлы и анализировать их локально. Тогда скрипт работает нормально.