2010-08-10 195 views
0

我有一個默認值的搜索表單。 當用戶使用頁面時,onload會調用一個函數。從循環外部打破循環

該函數有一個循環,每次迭代都會調用一個Ajax請求。

我花了大約20到30秒將執行所有的Ajax請求。

在這些迭代期間,用戶可以更改表單值,並且可以在這些迭代完成之前提交表單 。

當用戶點擊提交按鈕時,有沒有辦法打破這個循環?

謝謝。

+0

20到30秒?對於AJAX調用似乎相當長... – scunliffe 2010-08-10 13:26:23

+0

如果AJAX請求異步完成(因爲他們可能會這樣做,因此_A_JAX),請求會相互之間很快被觸發。它們可能需要大約30秒才能完成,但請求已經發送完畢。 – 2010-08-10 13:27:20

回答

1

在調用每個ajax請求之前,它會檢查一個標誌。舉例來說,它可能在頁面加載時被初始化爲CARRY_ON = true;

現在,當按下提交按鈕時,將該標誌更改爲false。然後所有未來的ajax請求將被停止。

3

如果表單被回發,頁面將被卸載。任何掛起的請求都將被刪除(儘管服務器將繼續處理它已經看到的任何請求,但無法提供幫助)。如果這個帖子也是通過AJAX發生的,那麼你可以使用一個保護變量,並且在你提交之前簡單地設置它,並在你發送更新請求之前檢查它。

我假設你想定期更新,直到表單被提交 - 循環並不是真正理想的處理方式。下面的例子使用setTimeout來每秒鐘輪詢服務器 - 只要表單尚未提交。

var submitted = false; 
var timer = null; 
$('.submit-button').click(function() { 
    submitted = true; 
    if (timer) clearTimeout(timer); 
    $('form').submit(); 
    return false; 
}); 

function doUpdate() 
{ 
    if (!submitted) { 
     $.ajax({ 
      ... 
     }); 
     timer = setTimeout(doUpdate,1000); 
    } 
} 

doUpdate(); 
1

當您提交表單時,自動終止其他客戶端執行。

如果您使用Ajax提交,那麼您可以保留一個標誌(全局變量)來停止循環。