responseXML显示为null,即使xhr对象将其显示为set

时间:2016-01-21 15:45:09

标签: javascript xmlhttprequest

我有以下代码,最终填充表格。此时我创建了一个XHR,在加载时它将调用我的员工集合流程XML函数

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对象并在控制台中展开节点,我怎么能看到responseXML作为文档,但是当我尝试直接访问xhr对象的这个属性时 - 我不能?

2 个答案:

答案 0 :(得分:2)

您遇到的问题是您正在调用方法并将其返回的内容分配给onload。所以,当你是" assiging"它在实际加载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); };

答案 1 :(得分:1)

原因可能是在浏览器开发人员工具中展开对象值时评估对象值。例如,当您null中有console.log时 - 它已在执行时记录。

但是,在您的控制台窗口(稍后)中展开它时,会评估第二个console.log,它会为您提供document值。