教你如何終止JQUERY的$.AJAX請求
最近遇到,如果用戶頻繁點擊ajax請求,有兩個問題:
1,如果連續(xù)點擊了5個ajax請求,前4個其實是無效的,趁早結束節(jié)省資源。
2,更嚴重的問題是:最后一個發(fā)送的請求,響應未必是最后一個,有可能造成混亂。還需要一個隊列來維護發(fā)送的請求和響應。
我其實已經設計好了該隊列的實現方式,后來發(fā)現jQuery直接通過abort方法,這樣就不需要那么復雜的實現了,畢竟還有其他事情等著完成。
用jquery發(fā)送ajax請求的確是太方便了,$.get、$.post、$.ajax等等,但我們有時候需要中途中止ajax請求。
舉個例子,用comet做聊天時,發(fā)送一個請求后,服務端通常過幾十秒后才會刷新鏈接、返回數據。假設服務端是30秒刷新一次鏈接,如果我們在10秒時想要停止這個ajax請求,怎么辦呢?
先上代碼,后面再解釋
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){
….//一些操作
});
ajaxGet.abort();
上面這段代碼其于兩個知識點:
1. $.get返回的數據類型是XMLHttpRequest,請參考手冊。($.post、$.ajax、$.getJSON、$.getScript也同樣)
2. XMLHttpRequest對象有abort()方法
注意:abort()后,ajax請求立即停止,但還是會執(zhí)行后面的function()。如果想避免執(zhí)行其中的操作,可以在function()開始位置加判斷
var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){
if(data.length == 0) return true;
….//一些操作
});
ajaxGet.abort();
終止ajax請求:
var request = $.get(“ajax.aspx”,{id:1},function(data){
//do something
});
//終止請求動作.
request.abort();
防止重復請求:
var request;
if(request != null)
request.abort();
request = $.get(“ajax.aspx”,{id:1},function(){
//do something
});
ajax & setTimeout實現 secondTry 在等待一秒之后將firstTry的ajax終止:
var firstTry = $.ajax(
//do something
);
var secondTry = setTimeout(function(){alert(‘ok');firstTry.abort()},1000);
相關文章
JQuery中serialize()、serializeArray()和param()方法示例介紹
serialize()方法也是作用于一個JQuery對象,它能夠將DOM元素內容序列化為字符串,serializeArray()方法不是返回字符串,而是將DOM元素序列化后,返回JSON格式的數據2014-07-07
全面解析jQuery中的$(window)與$(document)的用法區(qū)別
這篇文章主要介紹了jQuery中的$(window)與$(document)的用法區(qū)別,具體內容大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。2017-08-08

