在系统开发中(前台页面使用jquery)遇到了以下需求,要根据多个主机名称去得到每一个主机的设备id,
一开始我用的是在
for
循环里面发送多个ajax的请求方式,但这种方式有很多缺点,首先因为是异步,
可能造成请求结果丢失,其次如果将请求方式改为同步,则会造成浏览器假死现象。
后来经过百度+google,得到了一种比较好的解决方法,就是使用递归。代码如下:
递归的好处就是可以知道什么时候继续循环,什么时候执行完毕,并回调后面的流程
var currentIndex=0;//退出递归的条件变量
var data = {};
function newRequest(){
if(currentIndex>=data.length){
return; //callback
}
var name = data[currentIndex].name;
$.ajax({
url: url
type: 'get',
timeout: 500,
async: true,
dataType: 'json',
complete:function(XMLHttpRequest,textStatus){
if (textStatus === "success") {
var res = $.parseJSON(XMLHttpRequest.responseText);
// callback
}
newRequest();
}
});
}
newRequest();