首页 > 解决方案 > xmlhttp.onreadystatechange 在异步调用中仅触发一次

问题描述

这是我的js代码

function makeAsynchronousPostHttpCall(url, params, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("POST", url, true); // false for synchronous request
    xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlHttp.send(params);
    xmlHttp.onreadystatechange = callback(xmlHttp);
    return xmlHttp.responseText;
}

function fooBar() {
    var url = foo;
    var config = bar;
    var params = "config=" + config;
    var callback = (xmlHttp) => {
        console.log(xmlHttp.readyState);
        if(xmlHttp.readyState == 1){
            document.getElementById('progress').innerHTML = 'Request in Progress For '+ config;
            document.getElementById('completedMessage').innerHTML = "";
        }
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            document.getElementById('progress').innerHTML = 'Request Completed For '+ config;
            document.getElementById('completedMessage').innerHTML = xmlHttp.responseText;
        }
    }
    makeAsynchronousPostHttpCall(url, params, callback);

}

一切wrt请求和响应工作正常。请求成功,我得到了预期的响应。但问题是我的“xmlHttp.onreadystatechange”回调只触发了一次。即在控制台日志中我只能找到“1”。但是当我使用同步调用时,同样的情况也可以正常工作。我的页面正在更新我完成的消息。但是通过异步调用,页面将使用“请求进度条”进行更新,但是一旦请求完成,我的页面中就看不到任何进一步的变化。

使用异步调用时有什么问题吗?

谢谢 !!

标签: javascriptasynchronousxmlhttprequest

解决方案


推荐阅读