在嵌套的 XMLHttpRequest() 中调用“this”有什么区别? [重复]

问题描述 投票:0回答:0

我是 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 的新手 - 更详细的解释将不胜感激!

再次感谢

javascript nested xmlhttprequest this web-development-server
© www.soinside.com 2019 - 2024. All rights reserved.