循环发送ajax请求的问题

时间:2022-12-15 18:52:35
在系统开发中(前台页面使用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();