我一旦用戶在輸入框中鍵入一個字符,就使用$ .get發出一個ajax請求 我想中止先前的ajax調用,然後創建新的ajax調用,有沒有辦法?
編輯
解決了!
我剛剛發現$ .get是$ .ajax的簡寫方式,因此它返回一個XHR,因此我們可以在該變量上調用abort。
我一旦用戶在輸入框中鍵入一個字符,就使用$ .get發出一個ajax請求 我想中止先前的ajax調用,然後創建新的ajax調用,有沒有辦法?
編輯
解決了!
我剛剛發現$ .get是$ .ajax的簡寫方式,因此它返回一個XHR,因此我們可以在該變量上調用abort。
您可以在$.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。
更好的方法是設置ajax請求的超時時間,並在每個按鍵上覆蓋該按鍵,這樣實際的請求將不會觸發,直到用戶停止鍵入一秒。 這樣你就不會發出不必要的請求,並且它在服務器和客戶端上的負載都較低。
編輯用於位更加清晰:
var t = false;
function makeRequest(){
t = setTimeout(function(){
$.get() // make the request
},1000);
}
呼籲每個按鍵的功能。如果用戶在1秒內按下另一個鍵,則超時將被覆蓋,最終僅在用戶沒有按下鍵1秒時纔會觸發。
我將如何設置ajax請求超時? – Shaheer 2010-11-12 11:05:27
看到我的編輯,希望能清除它 – 2010-11-12 12:29:16
-1,因爲它是錯誤的。只要覆蓋存儲定時器ID的變量不會中止舊定時器。你需要首先執行'clearTimeout(t)'。 – 2013-11-02 15:36:26
可能重複[jquery abort()ajax請求之前發送另一個](http://stackoverflow.com/questions/3312960/jquery-abort-ajax-request-before-sending-another) – 2010-11-12 10:55:41