2014-02-01 4 views
0

Это моя первая попытка XMLHttpRequest, и хотя она работает (содержимое загружается из файла xml и отображается правильно в браузере), Mozilla Console показывает ошибку:XMLHttpRequest выбрасывает ошибку responseXML = null, но контент появляется в любом случае

[15:05:54.147] TypeError: xmlTree is null @ http://127.0.0.1/scripts/firstExternal.js:37 

Я не знаю, как это может быть null, если содержимое загружается?

Вот функция, вызывается из события window.onload:

function getXML() { 
    if (window.XMLHttpRequest) { 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = (function() { 
      if (xhr.readyState = 4) { 
       if (xhr.status = 200) { 
        var xmlTree = xhr.responseXML; 
        var container = document.getElementById("container"); 
error here:   var textList = xmlTree.getElementsByTagName("text"); 
        for (var i = 0; i<textList.length; i++) { 
         var tempText = document.createTextNode(textList[i].textContent); 
         var tempElem = document.createElement("P"); 
         tempElem.appendChild(tempText); 
         container.appendChild(tempElem); 
        } 
       } else { 
        document.getElementById("container").innerHTML = xhr.status + " - " + xhr.statusText; 
       } 
      } 
     }); 
     xhr.open("GET","/res/sample.xml",true); 
     xhr.send(); 
    } 
} 

и XML:

<?xml version="1.0" encoding="UTF-8"?> 
<xml> 
    <text>This is a sentence.</text> 
    <text>This is the second sentence.</text> 
    <text>ain't one.</text> 
    <text>More bric a brac</text> 
    <text>Foo, bar, baz. Fizzbuzz forever.</text> 
</xml> 

EDIT: Заголовок ответа:

Date: Sat, 01 Feb 2014 23:31:03 GMT Server: Apache/2.2.22 (Ubuntu) Last-Modified: Sat, 01 Feb 2014 23:28:47 GMT Etag: "21d16-ed-4f160a6f67bb5" Accept-Ranges: bytes Content-Length: 237 Content-Type: application/xml 
+0

Я думаю, что вы не можете использовать попробуйте другой – CodeIsLife

+0

@MidoDev - Я пробовал другие имена для корневого тега наподобие '' и т. Д. Не исправлял его. –

ответ

2

Ваш тесты, чтобы убедиться, что ReadyState и состояние в порядке, используют присвоения (=) вместо равенство тесты (===).

Следовательно, они всегда true, поэтому содержимое if запускается каждый раз при изменении readyState.

Последний раз, когда они запускаются, это 4 и 200, поэтому отображаются правильные данные.

В предыдущий раз вы получите сообщение об ошибке.

+0

Ха-ха, конечно. Однако такой простой надзор не должен быть ответом '==', а не '==='? –

+1

Имеются заслуги как оператора равенства, так и оператора строгого равенства. Я предпочитаю по умолчанию использовать оператор strict equals, так как правила преобразования типов в оператор равенства являются немного неинтуитивными, поэтому я использую их только тогда, когда знаю, что они мне нужны. – Quentin

+0

ОК, на самом деле я даже не знал, что это действительно сравнение, я думал, что это опечатка. Спасибо, что указали, что я буду читать о разнице. –

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