假設有一個表單。提交表單時,我正在向服務器調用一個ajax請求。當它正在執行時,我不希望再次觸發ajax調用。 一旦我完成了ajax調用,只有ajax調用可以再次觸發。如何在已經啓動時阻止ajax調用?
我該如何執行此操作?在這裏我想使用JQUERY庫來實現這一點。
假設有一個表單。提交表單時,我正在向服務器調用一個ajax請求。當它正在執行時,我不希望再次觸發ajax調用。 一旦我完成了ajax調用,只有ajax調用可以再次觸發。如何在已經啓動時阻止ajax調用?
我該如何執行此操作?在這裏我想使用JQUERY庫來實現這一點。
設置一個變量(在一個範圍比初始化Ajax呼叫功能較寬)的值(如true
),當函數運行。
回調運行時將其設置爲不同的值。
如果在初始化函數運行時已經設置,則立即返回。
var call_in_progress = false;
function myEventHandler(e) {
if (call_in_progress) { return false; }
call_in_progress = true;
jQuery.ajax(etc etc myCallback);
}
function myCallback() {
call_in_progress = false;
}
嗨@Quentin,我找到了類似這樣的東西 '$(「p」)。click(function(event){ event.stopPropagation(); // do something }); ' 這會在這方面有所幫助嗎? – Abhishek
你可以簡單地用一些javascript變量來做到這一點。
當您的操作開始時,將其設置爲true。 ,並在操作完成時再次將其設置爲false。
如果任何並行操作開始,那麼應該檢查該變量的值,如果沒有做任何事情,則返回true。
例如:
var myOperationLocks = new Array();
function formPostByAjax()
{
/* check for lock */
if(myOperationLocks['form_post'] == true)
return ;
/* set the lock */
myOperationLocks['form_post'] = true;
/* do some work */
jQuery.post(url,data,function(response)
{
/* do something with response , then release the lock */
myOperationLocks['form_post'] = false ;
}
}
嗨Dhruv,我很感謝你的清晰和明確的答案。 是否有任何AJAX設置可以在jQuery中完成,它可以自動解決這個問題? JavaScript標誌變量並不是一個「寫得更少,做得更多」的方法。 – Abhishek
嗨@DhruvPathak,我發現像這樣的$(「p」)。click(function(event){event.stopPropagation(); // do something});'這在這種情況下會有幫助嗎? – Abhishek
是的,我認爲,但你必須通過文檔。 – DhruvPathak
保持一個當Ajax請求啓動時設置爲TRUE的變量。在每個請求被設置之前通過檢查這個變量。
爲了避免對某些麻煩(如服務器沒有回覆)進行查殺操作,如果問題不經常發生,您可以拋出一個「你真的想查詢」的查詢。你也可以讓變量保持時間,如果時間超過某個限制,再次允許它通過。但請記住在Ajax完成後清除時間變量。
JavaScript變量怎麼樣:) – naveen
當然,我不是在問PHP變量.P 只是想知道從像你這樣的有經驗的人那裏獲得最好的方法是什麼。 :) – Abhishek
沒有雙關意圖。我提到了像昆廷的答案。 – naveen