亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對ajax請求進行排序

對ajax請求進行排序

慕哥6287543 2019-07-26 14:43:53
對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');});

請參閱示例,并對異步請求進行并排比較。


查看完整回答
反對 回復 2019-07-26
?
慕俠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);


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 777 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號