終止jQuery的$.ajax方法abort

來源:互聯網
上載者:User

標籤:bsp   參考手冊   turn   響應   comet   pos   對象   避免   維護   

最近遇到,如果使用者頻繁點擊ajax請求,有兩個問題:
1,如果連續點擊了5個ajax請求,前4個其實是無效的,趁早結束節省資源。
2,更嚴重的問題是:最後一個發送的請求,響應未必是最後一個,有可能造成混亂。還需要一個隊列來維護髮送的請求和響應。

我其實已經設計好了該隊列的實現方式,後來發現jQuery直接通過abort方法,這樣就不需要那麼複雜的實現了,畢竟還有其他事情等著完成。



用jquery發送ajax請求的確是太方便了,$.get、$.post、$.ajax等等,但我們有時候需要中途中止ajax請求。
舉個例子,用comet做聊天時,發送一個請求後,服務端通常過幾十秒後才會重新整理連結、返回資料。假設服務端是30秒重新整理一次連結,如果我們在10秒時想要停止這個ajax請求,怎麼辦呢?
先上代碼,後面再解釋
1var ajaxGet = $.get("comet_server.php",{id:1},function(data){
2....//一些操作
3});
4ajaxGet.abort();
上面這段代碼其於兩個知識點:
1. $.get返回的資料類型是XMLHttpRequest,請參考手冊。($.post、$.ajax、$.getJSON、$.getScript也同樣)
2. XMLHttpRequest對象有abort()方法
注意:abort()後,ajax請求立即停止,但還是會執行後面的function()。如果想避免執行其中的操作,可以在function()開始位置加判斷
view sourceprint?
1var ajaxGet = $.get("comet_server.php",{id:1},function(data){
2if(data.length == 0) return true;
3....//一些操作
4});
5ajaxGet.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的$.ajax方法abort

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.