2016-05-22 4 views
0

Ok поэтому у меня есть следующий HTML-файл:Загрузка содержимого XML с помощью AJAX

<!DOCTYPE html> 
<html> 
<style> 
    table, 
    th, 
    td { 
    border: 1px solid black; 
    border-collapse: collapse; 
    } 
    th, 
    td { 
    padding: 5px; 
    } 
</style> 

<body> 

    <button type="button" onclick="loadDoc()">Get the names</button> 
    <br> 
    <br> 
    <table id="demo"></table> 

    <script> 
    function loadDoc() { 
     var xhttp = new XMLHttpRequest(); 
     xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
      myFunction(xhttp); 
     } 
     }; 
     xhttp.open("GET", "names.xml", true); 
     xhttp.send(); 
    } 

    function myFunction(xml) { 
     var i; 
     var xmlDoc = xml.responseXML; 
     var table = "<tr><th>Names</th></tr>"; 
     var x = xmlDoc.getElementsByTagName("Names"); 
     for (i = 0; i < x.length; i++) { 
     table += "<tr><td>" + 
      x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue; 
     } 
     document.getElementById("demo").innerHTML = table; 
    } 
    </script> 

</body> 

</html> 

И следующий файл XML, содержащие имена:

<?xml version="1.0" encoding="UTF-8" ?> 
<Names> 
    <Name>Alex</Name> 
    <Name>Anna</Name> 
    <Name>Eva</Name> 
    <Name>George</Name> 
    <Name>Jason</Name> 
    <Name>John</Name> 
    <Name>Lisa</Name> 
    <Name>Mary</Name> 
    <Name>Michael</Name> 
    <Name>Nick</Name> 
    <Name>Vicky</Name> 
</Names> 

И что я хочу, чтобы каким-то образом взять имена из xml-файл и сохранить их внутри массива, а затем распечатать их. Но по какой-то причине только первое имя хранится правильно («Алекс»). Я не понимаю, что я сделал неправильно. Может кто-нибудь мне помочь? Бьюсь об заклад, что что-то не так с myFunction(xml), но я не могу найти/исправить его

+0

Используйте Инструменты разработчика в вашем браузере. Посмотрите на консоль. Есть ли ошибки? Что делать, если вы добавляете инструкции console.log? Выполняется ли 'loadDoc' вообще? Выполняется ли 'myFunction' вообще? Является ли значение 'xml' тем, что вы ожидаете? Является ли значение 'x' тем, что вы ожидаете? Является ли значение 'x [i] .getElementsByTagName (" Name ") [0] .childNodes [0] .nodeValue', что вы ожидаете? – Quentin

+0

да я пробовал, но придумал пустой ... –

+0

Что это значит? Вы имеете в виду, что не было ошибок и одно из значений, которые вы тестировали для строки с нулевой длиной? – Quentin

ответ

1

Вы должны проверить это:

var x = xmlDoc.getElementsByTagName("Names"); // Get the Names node. 
var data = x[0].getElementsByTagName("Name"); // Get the Name node. 

(function() { 
 

 
    function myFunction(xml) { 
 
    var i; 
 
    var xmlDoc = (new window.DOMParser()).parseFromString(xml, "text/xml"); 
 
    var table = "<tr><th>Names</th></tr>"; 
 
    var x = xmlDoc.getElementsByTagName("Names"); 
 

 
    var data = x[0].getElementsByTagName("Name"); 
 

 
    for (i = 0; i < data.length; i++) { 
 
     table += "<tr><td>" + data[i].childNodes[0].nodeValue + "</td></tr>"; 
 
    } 
 
    document.getElementById("demo").innerHTML = table; 
 
    } 
 

 
    var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Names> <Name>Alex</Name> <Name>Anna</Name> <Name>Eva</Name> <Name>George</Name> <Name>Jason</Name> <Name>John</Name> <Name>Lisa</Name> <Name>Mary</Name> <Name>Michael</Name> <Name>Nick</Name> <Name>Vicky</Name></Names>"; 
 
    myFunction(xml); 
 

 

 
})();
<table id="demo"></table>

2

Существует только один тег Names, поэтому ваш цикл будет выполняться только один раз.
Я бы обвел вместо тегов Name.

function myFunction(xml) { 
    var i; 
    var xmlDoc = xml.responseXML; 
    var table = "<tr><th>Names</th></tr>"; 
    var x = xmlDoc.getElementsByTagName("Name"); 
    for (i = 0; i < x.length; i++) { 
    table += "<tr><td>" + 
     x[i].childNodes[0].nodeValue; 
    } 
    document.getElementById("demo").innerHTML = table; 
} 
Смежные вопросы