我是 JavaScript 的新手,在调用 XMLHttpRequest 函数时遇到了问题。
我的代码如下:
document.addEventListener('load', loadJsonFile(), false);
function reqListener() {
var obj = JSON.parse(this.responseText)
//Send for the html of a generic post
var reqObj = new XMLHttpRequest();
reqObj.onload = buildProjects(reqObj, obj);
reqObj.open("get", "post_box.html", true);
reqObj.send();
}
function buildProjects(reqObj, data){
for(var i = 0; i < 5; i++){
html = reqObj.responseText;
console.log("data is: " + data.title);
console.log("State: " + this.readyState);
console.log("Request object is: " + reqObj);
console.log("Response is: " + reqObj.response);
console.log("html is: " + html);
}
}
//Load all project data
//Then call reqListener function
function loadJsonFile(){
var reqObj = new XMLHttpRequest();
reqObj.onload = reqListener;
reqObj.open("get", "test.json", true);
reqObj.send();
}
我预计在 buildProjects() 函数中调用“this”会返回调用 XMLHttpRequest 对象。这不会发生。而是返回一个“窗口”对象。
我尝试通过将 reqObj 作为参数传递来解决此问题,但这也不起作用。我猜这是一个范围问题?
我不知道为什么调用“this”不起作用。当我调用了一个 XMLHttpRequest.onload 函数时,调用“this”对我有用,所以我认为这与在请求中嵌套请求有关?
我看到过一个类似的问题,关于使用箭头符号调用的函数,但我看不出那里的答案是如何回答我的问题的。
感谢帮助,
谢谢
我设法通过将 .bind() 标记到函数调用的末尾来解决我的问题。这会强制关键字“this”成为 bind() 参数中传递的任何值。感谢您的评论指出这一点。
虽然我的问题在这种情况下得到解决,但我仍然不明白最初出了什么问题。正如我所说,我是 JS 的新手 - 更详细的解释将不胜感激!
再次感谢