我有以下代码,最终填充表格。此时我创建了一个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对象的这个属性时 - 我不能?
答案 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
值。