JavaScript中的while循环中的http请求

时间:2015-03-09 04:58:26

标签: javascript xmlhttprequest

我正在尝试在while循环中发送xmlHttpRequest,并希望在同一个while循环中对响应执行某些操作。由于请求是异步的,我该如何实现呢?我需要连续执行所有内容

while(i < n){
 response = self.sendHttpRequest(params);
 //do something with the response
}

任何帮助将不胜感激。 即使我使用回调,如何在执行回调后返回同一个循环?

2 个答案:

答案 0 :(得分:1)

您使用的是任何ajax库还是普通的js。如果您没有使用任何库,则可以将第三个参数传递给open方法false.like下面的

var xmlHttp=new xmlHttpRequest(); xmlHttp.open({YOUR_METHOD},{YOUR_PATH},false);

将false传递给open方法会进行同步调用。所以你可以在同一个循环中处理返回。

答案 1 :(得分:0)

我能想到两种方式:
1.在get调用之后添加一个轮询循环,直到设置了response.readyState,然后处理响应:

while(i < n){
 response = self.sendHttpRequest(params);
 while( response.readyState != 4 ){
     // polling wait
 }
 //do something with the response
}

这个选项并不是真正推荐的,因为它会停止代码的流动,如果readyState永远不会改变,你可以在循环中停止(不太可能,但可能有错误)。


2.您可以将请求封装在一个函数中,该函数将在最后一个响应处理完成时以递归方式调用:

var i = 0;
function handle( response ){
    //handle response
    i++;
    if( i < n ) sendRequest();
}

function sendRequest(){
    // Your request setup code
    response.onreadystatechange = handle;
    response = self.sendHttpRequest(params);
}


在我看来,第二种方法是优选的,因为它保持了html请求调用的异步性,并且不会停止代码流,但是它确实“打破”了循环结构。第一种方法保留了循环结构,但编码实践不是很好。