2016-04-12 66 views
0

我知道有很多關於如何進行同步AJAX調用的示例(使用延遲承諾),但我的問題有點不同。這裏就是我試圖做基於響應的重複同步AJAX調用

  1. 做一個AJAX調用
  2. 如果響應包含一定的值,則循環再次運轉並進行另一次的AJAX調用不同的參數。參數的值將取決於第一個AJAX調用的響應,因此在進行第二個AJAX調用之前必須等待。
  3. 如果響應包含(exit = true),則退出循環。

我明白,如果服務器永遠不會返回條件3,我們將處於無限循環。

如何繼續循環AJAX調用,直到來自AJAX調用的響應包含特定值?

+1

把你的ajax調用放在一個函數中,並有一個while循環執行該函數,直到符合X條件。確保在jquery ajax調用中設置async:false,以確保同步處理。不過,如果您使用的是同步處理,它會鎖定您的瀏覽器。您將無法點擊,滾動等,直到您的while循環完成執行。 – mhodges

+2

「同步」你不是說異步嗎? – epascarello

+0

...或者「順序」?承諾永遠不會同步。 – Bergi

回答

0

將代碼放在一個命名函數中進行AJAX調用。 AJAX的回調函數檢查響應是否包含exit = true。如果不是,則再次調用命名函數以使用更新後的函數進行下一次AJAX調用。

function call_ajax(params ...) { 
    $.ajax({ 
     url: "url", 
     data: { whatever }, 
     dataType: 'json' 
     success: function(response) { 
      if (!response.exit) { 
       // calculate new parameters 
       call_ajax(new_params ...); 
      } 
     } 
    }) 
}