对ajax请求进行排序我发现有时我需要迭代一些集合并为每个元素进行ajax调用。我希望在转移到下一个元素之前返回每个调用,这样我就不会向服务器发送请求 - 这通常会导致其他问题。我不想将异步设置为false并冻结浏览器。通常这涉及设置某种迭代器上下文,我逐步通过每个成功回调。我认为必须有一个更简洁的方式吗?有没有人有一个聪明的设计模式,如何通过一个集合为每个项目制作ajax调用整齐地工作?
3 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
使用延期承诺的快速小解决方案。虽然这使用jQuery $.Deferred
,但任何其他人都应该这样做。
var Queue = function () { var previous = new $.Deferred().resolve(); return function (fn, fail) { return previous = previous.then(fn, fail || fn); };};
用法,调用创建新队列:
var queue = Queue();// Queue empty, will start immediatelyqueue(function () { return $.get('/first');});// Will begin when the first has finishedqueue(function() { return $.get('/second');});
请参阅示例,并对异步请求进行并排比较。
慕侠2389804
TA贡献1719条经验 获得超6个赞
理想情况下,一个具有多个入口点的协程,因此从服务器回调的每个回调都可以调用相同的协程。该死的,这将在Javascript 1.7中实现。
让我尝试使用闭包......
function BlockingAjaxCall (URL,arr,AjaxCall,OriginalCallBack){ var nextindex = function() { var i =0; return function() { return i++; } }; var AjaxCallRecursive = function(){ var currentindex = nextindex(); AjaxCall ( URL, arr[currentindex], function() { OriginalCallBack(); if (currentindex < arr.length) { AjaxCallRecursive(); } } ); }; AjaxCallRecursive(); }// suppose you always call Ajax like AjaxCall(URL,element,callback) you will do it this wayBlockingAjaxCall(URL,myArray,AjaxCall,CallBack);
添加回答
举报
0/150
提交
取消