javascript 执行多个XMLHttpRequest

pu82cl6c  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(220)

我需要在短时间内执行多个XMLHttpRequest。
在我使用jquery之前,我的代码如下所示,运行得很好(我没有以任何方式存储结果):

function doStats(){

var postData....

$.ajax({
        url: url,
        type: 'post',
        data: postData,
        dataType: "json"
    }).done(function(response){

    
    }).fail(function(jqXHR, textStatus, errorThrown) {
   
    }); 

}

现在我已经转换为javascript,如果我在短时间内多次调用doStats,this. responseText会确保我的结果总是正确的,并且会创建xhrRequest_stat = new XMLHttpRequest();而不影响之前的那个

function doStats(){

var params...

xhrRequest_stat = new XMLHttpRequest();
    xhrRequest_stat.onreadystatechange = function() {
        if (xhrRequest_stat.readyState == 4) {
            console.log(this.responseText)
        }
    }
    xhrRequest_stat.onerror = function(e) { 
        console.log('Error getStats: ' + e);
    };
    xhrRequest_stat.open('POST', url);
    xhrRequest_stat.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded');
    xhrRequest_stat.send(params);

 }

因为我有时调用这个函数几次有时不调用,它没有真正的顺序,所以我不能真正使用for循环。

vs91vp4v

vs91vp4v1#

在声明/初始化xhrRequest_stat变量时,必须添加“const”关键字。这样,每次调用该函数时,都能创建一个新的xhrRequest_stat变量。
如果要避免JavaScript中的副作用,函数中使用的变量必须位于函数的签名中(url,此处为):

function doStats(url){

var params...

const xhrRequest_stat = new XMLHttpRequest();
    xhrRequest_stat.onreadystatechange = function() {
        if (xhrRequest_stat.readyState == 4) {
            console.log(this.responseText)
        }
    }
    xhrRequest_stat.onerror = function(e) { 
        console.log('Error getStats: ' + e);
    };
    xhrRequest_stat.open('POST', url);
    xhrRequest_stat.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded');
    xhrRequest_stat.send(params);

 }

相关问题