2009-11-19 107 views
0

我想確保一次只有一個AJAX請求(對於一個用戶)。這是我試過的:一次只有一個AJAX請求?

var ajaxFinished = 1; 

$('#selector').keyup(function() { 

    if (ajaxFinished == 1) { 

     ajaxFinished = 0; 

     $.get('test.php', { par : "par" }, function(data) { 

      // do stuff with data 
      ajaxFinished = 1; 

     }); 
    } 

}); 

但問題是AJAX請求現在只執行一次,即使我多次激活事件。

回答

3

我認爲科裏已釘牢。另一種可能性:可能是你引用的代碼塊在另一個我們沒有看到的函數內?那麼它可能是ajaxFinished超出了範圍 - 糾正我,如果我錯了,我對JS範圍和匿名函數的知識並不完美。在這種情況下,您將不得不刪除「var」或在主體中聲明它。

+0

是的,就是這樣,它在一個對象方法中,所以我不得不使用這個關鍵字。 – 2009-11-19 19:28:02

3

難道是當你$ .get發生錯誤,並且ajaxFinished永遠不會被重置爲1嗎?

您可能想要使用$ .ajax而不是$ .get。 $ .ajax將讓你捕捉成功和錯誤事件。

1

如果我是編碼該功能,我將它分解和叫了暫停沿着這些線路

var autocomplete_timeout; 

$('#selector').keyup(function() { 

    if(autocomplete) 
     clearTimeout(autocomplete_timeout); 
    autocomplete_timeout = setTimeout(300, "autocomplete('"+ this.val() +"');"); 
}); 

function autocomplete(param1, param2){ 
     $.get('test.php', { par : "par" }, function(data) { 

      // do stuff with data 
      ajaxFinished = 1; 

     }); 
} 

東西緩衝Ajax調用,直到300毫秒的用戶已經停止打字

2

我猜ajaxFinished後應該是一個全局變量。刪除var關鍵字。嘗試:

ajaxFinished = 1;