Rumah >hujung hadapan web >tutorial js >$.Deferred(),for循环内异步请求问题的解决方法

$.Deferred(),for循环内异步请求问题的解决方法

一个新手
一个新手asal
2017-10-07 11:39:261935semak imbas

问题:有一个数组,数组中每一个元素异步请求后端获得相应的内容进行操作。

var arr=[];for(let i=0;i<arr.length;i++){
    $.post("请求地址",“传递数据”,function(){
         //异步请求后的操作
   })
}

for循环中使用异步请求时出现的问题就是:异步请求是不阻塞主程序,当异步请求出数据的时候,主程序可能已经结束,这就给我们程序带来问题。

如何在for循环内使用异步请求,同时保证数据的执行顺序?

解决办法:$.Deferred()

var lives=[……];
var defer = $.Deferred(); 
defer.resolve($("#aa").append("没有意义")); //该句为必须的,即使什么也不需要操作
$.each(lives,function(i,e){  
  defer = defer.then(function () {  
      return $.ajax({      //进行异步请求操作
        url:"请求地址",  
        type:&#39;post&#39;,
        data:{            //异步请求的数据
          "username":lives[i].username,
          "userId":lives[i].id,
        },
        dataType: "jsonp",
        success:function(data){  
          //异步请求后的操作
        }  
    })
  });  
});

另外$.deferred()相关内容还有很多

Atas ialah kandungan terperinci $.Deferred(),for循环内异步请求问题的解决方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn