2011-07-04 121 views
0

我想取消如果我的ajax請求花費很長時間與較慢的連接。通過按鈕點擊事件取消當前的ajax請求!

我在.ajaxStart()上顯示覆蓋圖,如果需要超過5個secons(我使用setInterval進行管理),覆蓋圖上會出現一個按鈕,該按鈕應該取消當前的ajax請求。

繼承人我的一些代碼:

jqXHR = $.ajax({ 
    url: 'includes/inc_ajax.php', 
    type: 'POST', 
    data: '&ajax=1&action=7', 
    success: function (txt) { 
     var cntr = $.parseJSON(txt); 
     $("#onlineppl").html(cntr.online); 
     $("#todayppl").html(cntr.bugun); 
     $("#totalppl").html(cntr.toplam); 
    } 
}); 

$("#abortAjax").button({ icons: {secondary: "ui-icon-cancel"} }).click(function() { 
    $(jqXHR).abort(); 
}); 

我必須在$.ajax()功能分配給一個變量來終止它?我也有很多Ajax請求,所以我想瀏覽器不能跟蹤導致中止方法不起作用的相同的var名稱。

這是我的第一個問題,我有點困惑。任何幫助讚賞。謝謝。

回答

0

是的,JavaScript是一種基於原型的語言,每個對象實例都有一個指針。當兩個ajax調用開始時,你的jqXHR只返回指向第二個ajax調用的指針。這也在this文章中指出,您必須從函數中獲取令牌,以便稍後可以引用它以取消它。

+0

遺憾的是,該鏈接是404。 –

0

注意 - 一旦接收到服務器,您無法真正停止在服務器上處理AJAX請求。即使瀏覽器不再監聽響應,服務器也會繼續處理請求。除了手動實現某些內容(如由不同頁面設置的會話屬性檢查)之外,沒有可靠的方法可以使Web服務器停止處理正在進行的請求。

所以基本上服務器仍然會運行,但客戶端瀏覽器將忽略響應 - 請注意,這也會影響您的連接對域的限制(默認情況下通常只有兩個)。