循环发送ajax请求的解决方法

来源:互联网 发布:怎样经营好淘宝网店 编辑:程序博客网 时间:2024/05/14 20:01
在系统开发中(前台页面使用jquery)遇到了以下需求,要根据多个主机名称去得到每一个主机的设备id,
一开始我用的是在for循环里面发送多个ajax的请求方式,但这种方式有很多缺点,首先因为是异步,
可能造成请求结果丢失,其次如果将请求方式改为同步,则会造成浏览器假死现象。
后来经过百度+google,得到了一种比较好的解决方法,就是使用递归。代码如下:
 var currentIndex=0;//退出递归的条件变量
 function newRequest(){
  if(currentIndex>=infos.length){ //infos是存放主机名称的数组
   return;
  }
  var vmName = infos[currentIndex].name;
   $.ajax({
    url:"/cloudportal/rest/interfaces/getVwDeviceInfo?dev_name="+vmName,  
    contentType:'application/json;charset=UTF-8',
    type:"get",
    dataType:"json",
    complete:function(a,b){
     currentIndex++;
     var json = $.parseJSON(a.responseText);
     if(json.success===true){
      var xmlDoc = $.parseXML(json.result);
      var $xml = $(xmlDoc);
      var $objid = $xml.find('objid');
      var objid = $objid.text();
      $("<option value=\""+objid+"\">"+dis_name+"</option>").appendTo($("#J_zhuji_name"));
     }
     newRequest();
    }
   });
 }
    newRequest();
原创粉丝点击