2011-08-24 57 views
0

假設有一個表單。提交表單時,我正在向服務器調用一個ajax請求。當它正在執行時,我不希望再次觸發ajax調用。 一旦我完成了ajax調用,只有ajax調用可以再次觸發。如何在已經啓動時阻止ajax調用?

我該如何執行此操作?在這裏我想使用JQUERY庫來實現這一點。

+0

JavaScript變量怎麼樣:) – naveen

+0

當然,我不是在問PHP變量.P 只是想知道從像你這樣的有經驗的人那裏獲得最好的方法是什麼。 :) – Abhishek

+0

沒有雙關意圖。我提到了像昆廷的答案。 – naveen

回答

2

設置一個變量(在一個範圍比初始化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; 
} 
+0

嗨@Quentin,我找到了類似這樣的東西 '$(「p」)。click(function(event){ event.stopPropagation(); // do something }); ' 這會在這方面有所幫助嗎? – Abhishek

1

你可以簡單地用一些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 ; 
    } 

} 
+0

嗨Dhruv,我很感謝你的清晰和明確的答案。 是否有任何AJAX設置可以在jQuery中完成,它可以自動解決這個問題? JavaScript標誌變量並不是一個「寫得更少,做得更多」的方法。 – Abhishek

+0

嗨@DhruvPathak,我發現像這樣的$(「p」)。click(function(event){event.stopPropagation(); // do something});'這在這種情況下會有幫助嗎? – Abhishek

+0

是的,我認爲,但你必須通過文檔。 – DhruvPathak

0

保持一個當Ajax請求啓動時設置爲TRUE的變量。在每個請求被設置之前通過檢查這個變量。

爲了避免對某些麻煩(如服務器沒有回覆)進行查殺操作,如果問題不經常發生,您可以拋出一個「你真的想查詢」的查詢。你也可以讓變量保持時間,如果時間超過某個限制,再次允許它通過。但請記住在Ajax完成後清除時間變量。

相關問題