2014-01-08 34 views
0

有沒有辦法調用jquery「when」函數中的下一個Ajax,當被調用的函數完成時(可能是回調或其他?)。 到目前爲止,我把這個例子也JSFiddle當成功回調中的單個Ajax完成時,繼續使用jQuery中的另一個函數?

陣列的URL在本例中爲本地主機履帶

var iterations = ['//localhost?p=1', '//localhost?p=2', '//localhost?p=3']; 

緊緊擁抱每一個Ajax調用

var xhr = []; 

這樣的迭代

$.each(iterations, function(url, k){ 

    // store every ajax function in the array 
    xhr.push(
     $.ajax({ 
      url: url, 
      cache: false, 
      //async: false, 
      dataType: "html", 
      success: onSuccess 
     }) 
    ); 
}) 

    // then must be called when all onSuccess functions are done completed (every onsuccess have their own ajax call as well) 
    $.when.apply($, xhr).then(function(){ 
     alert('This must be called when all xhrs have been triggered'); 
    }) 

當這個函數裏面的AJAX調用有蜜蜂n觸發繼續下一次xhr迭代。有沒有一種方法可以對onSuccess函數進行回調?

function onSuccess(data){ 

     $.ajax({ 
      url: 'http://localhost', 
       cache: false, 
       //async: false, 
       dataType: "html", 
      success: function(){ 
       alert("on success 2, continue with the next xhr iteration"); 
      }, 
      error: function(){ 
       alert("on error 2, continue with the next xhr iteration"); 

      } 
     }) 
    } 

回答

1

這裏是你如何能做到這一點:使用「請求」(我看你已經有)的數組

  1. 設置的隊列。
  2. 然後通過執行第一個請求來啓動隊列。
  3. 在第一個請求的回調函數中,將您的迭代器移動到第二個請求上,並啓動它(可能只是一個簡單的int,從0開始,每增加一次)。第二個請求的回調與第一個請求的回調相同。
  4. 當您的迭代器到達數組的末尾時,您的所有請求都已完成,您可以調用最終方法。

使用此方法,一次只能運行一個請求。如果你同時需要它們,那麼你需要另一個數組來跟蹤每個請求的狀態。每次請求完成時,檢查您的狀態數組,查看它們是否全部循環完成。

1

一個好的選擇是使一個類或函數來處理這種處理。你可以通過幾種方法做到這一點。假設你用一個實用程序類來做這件事......我可以想象它有一個構造函數,start()_next()

構造函數將接收並保存一個URL數組。

start()會觸發一個AJAX請求,其成功(也可能是錯誤)回調到_next()。再次然後_next()將使使用_next()另一個AJAX調用作爲;

_next()會看URL的陣列,並挑選下一個(這可以通過移動它們關閉陣列的或使用和內部指針/頭進行成功/錯誤回撥

最後,在_next()中需要終止的情況下,因爲沒有更多的URL需要調用

相關問題