2014-01-23 3 views
0

Попытка прочитать файл XML в TPL файл (Smarty Template), как это:длина NodeList всегда 0

<script> 
         var xmlhttp = new XMLHttpRequest(); 

        xmlhttp.open("GET", "http://localhost:8080/testXML.xml", false); 
        xmlhttp.send(); 
        //xmlDoc = xmlhttp.responseText; 
        xmlDoc = (new DOMParser()).parseFromString(xmlhttp.responseXML, "text/xml"); 
        alert(xmlDoc); 
        document.write("<table border='1'>"); 
        //var x = new object(); 
        var x = xmlDoc.getElementsByTagName("Name"); 
        alert(x); 
        //alert(x.length); 
        for (i = 0; i < x.length; i++) 
        { 
         document.write("<tr><td>"); 
         document.write(x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue); 
         alert(x[i].getElementsByTagName("Name")[0].nodeValue); 
         document.write("</td><td>"); 
         document.write(x[i].getElementsByTagName("Location")[0].childNodes[0].nodeValue); 
         document.write("</td></tr>"); 
        } 
        document.write("</table>"); 

</script> 

оповещения (x.length) всегда возвращает 0. Это выглядит довольно стандартный код, Я нашел и собрал из сети.

+0

Проверьте консоль на наличие ошибок. – Phil

+0

ошибок в консоли –

+0

Что произойдет, если вы откроете http: // localhost: 8080/testXML.xml в своем браузере? Когда вы открываете страницу в хроме и нажимаете F12, вы можете проверить xmlhttprequest на вкладке сети (или консоли), что это показывает вам? Эти вещи были предложены раньше, но не были уверены, что результат был – HMR

ответ

3

Во-первых, я бы подтвердил, что xmlhttp.responseXML действительно содержит данные. Контролируйте свою сетевую панель (если вы используете браузер) для ответа сервера.

Во-вторых, если ваш xmlhttp.responseXML является null, но ваш xmlhttp.responseText не так, это указывает, что существует проблема с документом XML - обычно уродливы теги/схемы, или ведущие пробельные. Из того, что вы выложили, я не вижу каких-либо проблем (и DOMParser() grokked в XML просто отлично.)

Последнее, что не должно быть никакой необходимости использовать DOMParser(), поскольку xmlhttp.responseXMLявляется XML-документ (если он есть после загрузки загрузился правильно).

[EDIT]

Также отметим, что если страница также не загружается из localhost:8080, вы не можете получать любые данные, из-за ограничений междоменных присущих AJAX.

+0

Проблемы с перекрестными доменами представляли бы собой ошибки. Хорошая точка, хотя :) – Phil

+0

Мне пришлось использовать DOMParser, потому что xmlhttp.responseXML показывал нуль. Даже теперь мой resposeXML показывает значение null, а responseText - пустым. Что мне делать? – Adi

+0

Что показывает ваша консоль разработчика? Каков ответ с сервера? – Andrew

3

Вы не должны разбирать свой responseXML, это сам объект XML-документа сам по себе, если заголовок типа содержимого ответа настроен правильно.

Заканчивать этот fiddle

var xmlDoc = xmlhttp.responseXML; 
var x = xmlDoc.getElementsByTagName("Name"); 
alert(x.length); 
+0

Что это за скрипта: xmlhttp.send ('xml =' + encodeURIComponent (xml)); ?? Мне нужно изменить его в моем коде? – Adi

+0

Нет. Это должно имитировать запрос AJAX на JSFiddle. Просто убедитесь, что заголовок 'Content-Type' установлен на' text/xml' с вашего ответа сервера – shyam

+0

И как именно я это делаю? – Adi

Смежные вопросы