2016-01-21 84 views
0

我有以下代碼最終會填充表。在這一點上,我創建了一個XHR,在它的負載它將打電話給我的員工收藏過程XML功能responseXML顯示爲null即使xhr對象將其顯示爲集

EmployeeCollection.prototype.fetchXML = function(path, callback) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", path, true); 
    xhr.send(); 

    xhr.onload = this.processXML(xhr, callback); 
}; 

EmployeeCollection.prototype.processXML = function(xhr, callback) { 
    console.log(xhr); // this shows an XHR object with 
         // readyState: 4 and responseXML: document 

    console.log(xhr.responseXML); // null 
} 

我的問題是;如果我訪問xhr對象並展開控制檯中的節點,但是當我嘗試直接訪問xhr對象的這個屬性時,我怎麼能將responseXML看作一個文檔 - 我不能?

+0

要調用的函數,而不是分配給它..... – epascarello

回答

1

您遇到的問題是您正在調用該方法並將其返回給onload。所以當你「分配」時,它會在Ajax調用實際加載之前調用該方法。

xhr.onload = this.processXML(xhr, callback); 

應該

xhr.onload = this.processXML.bind(this, xhr, callback); 

var that = this; 
xhr.onload = function() { that.processXML(xhr, callback); }; 
+0

bind()對我來說工作得很好,有時間閱讀那些內容!非常感謝你。 –

1

原因可能是您在瀏覽器開發人員工具中展開時評估對象值。例如,目前您的console.log中有null - 它在執行時已記錄。

但第二個console.log給你document價值是在您在控制檯窗口(稍後)中展開時評估的。

+0

我正好在同一時間登錄這兩個值,但是。 –

+0

是的,但想象一下當時沒有設置xhr.responseXML,但是設置了xhr對象(它不會記錄null) - 這就是爲什麼您可以在窗口中瀏覽它並查看其屬性。然後它是屬性 - 稍後將設置'responseXML',並在您稍後在您的控制檯中單擊展開時對其進行評估。 –

+0

因此,所設置的值是在將此函數分配給'onload'時的值,但是當我嘗試記錄xhr對象時,它會在登錄時向我顯示xhr對象?這就說得通了。 –