我有一個默認值的搜索表單。 當用戶使用頁面時,onload會調用一個函數。從循環外部打破循環
該函數有一個循環,每次迭代都會調用一個Ajax請求。
我花了大約20到30秒將執行所有的Ajax請求。
在這些迭代期間,用戶可以更改表單值,並且可以在這些迭代完成之前提交表單 。
當用戶點擊提交按鈕時,有沒有辦法打破這個循環?
謝謝。
我有一個默認值的搜索表單。 當用戶使用頁面時,onload會調用一個函數。從循環外部打破循環
該函數有一個循環,每次迭代都會調用一個Ajax請求。
我花了大約20到30秒將執行所有的Ajax請求。
在這些迭代期間,用戶可以更改表單值,並且可以在這些迭代完成之前提交表單 。
當用戶點擊提交按鈕時,有沒有辦法打破這個循環?
謝謝。
在調用每個ajax請求之前,它會檢查一個標誌。舉例來說,它可能在頁面加載時被初始化爲CARRY_ON = true;
現在,當按下提交按鈕時,將該標誌更改爲false。然後所有未來的ajax請求將被停止。
如果表單被回發,頁面將被卸載。任何掛起的請求都將被刪除(儘管服務器將繼續處理它已經看到的任何請求,但無法提供幫助)。如果這個帖子也是通過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();
當您提交表單時,自動終止其他客戶端執行。
如果您使用Ajax提交,那麼您可以保留一個標誌(全局變量)來停止循環。
20到30秒?對於AJAX調用似乎相當長... – scunliffe 2010-08-10 13:26:23
如果AJAX請求異步完成(因爲他們可能會這樣做,因此_A_JAX),請求會相互之間很快被觸發。它們可能需要大約30秒才能完成,但請求已經發送完畢。 – 2010-08-10 13:27:20