2010-11-12 102 views
12

我一旦用戶在輸入框中鍵入一個字符,就使用$ .get發出一個ajax請求 我想中止先前的ajax調用,然後創建新的ajax調用,有沒有辦法?

編輯

解決了!

我剛剛發現$ .get是$ .ajax的簡寫方式,因此它返回一個XHR,因此我們可以在該變量上調用abort。

+0

可能重複[jquery abort()ajax請求之前發送另一個](http://stackoverflow.com/questions/3312960/jquery-abort-ajax-request-before-sending-another) – 2010-11-12 10:55:41

回答

26

您可以在$.get返回的XMLHttpRequest上使用.abort()

var req = $.get('ajax/test.html', function(data) { 
      $('.result').html(data); 
      alert('Load was performed.'); 
      }); 

//Abort request 
req.abort() 

jQuery.ajax()文檔:

的$阿賈克斯()函數返回它創建的XMLHttpRequest對象。通常jQuery在內部處理這個對象的創建,但是可以使用xhr選項指定用於製造一個對象的自定義函數。通常可以丟棄返回的對象,但確實提供了用於觀察和操作請求的較低級別的接口。特別是,在對象上調用.abort()將在請求完成之前暫停請求。

更多關於.abort()https://developer.mozilla.org/en/XMLHttpRequest#abort

還有用於處理並行地由多個Ajax請求jQuery插件AjaxQueue

-2

更好的方法是設置ajax請求的超時時間,並在每個按鍵上覆蓋該按鍵,這樣實際的請求將不會觸發,直到用戶停止鍵入一秒。 這樣你就不會發出不必要的請求,並且它在服務器和客戶端上的負載都較低。

編輯用於位更加清晰:

var t = false;  
function makeRequest(){ 
     t = setTimeout(function(){ 
      $.get() // make the request 
     },1000); 
    } 

呼籲每個按鍵的功能。如果用戶在1秒內按下另一個鍵,則超時將被覆蓋,最終僅在用戶沒有按下鍵1秒時纔會觸發。

+0

我將如何設置ajax請求超時? – Shaheer 2010-11-12 11:05:27

+0

看到我的編輯,希望能清除它 – 2010-11-12 12:29:16

+8

-1,因爲它是錯誤的。只要覆蓋存儲定時器ID的變量不會中止舊定時器。你需要首先執行'clearTimeout(t)'。 – 2013-11-02 15:36:26