簡體   English   中英

如何停止所有ajax請求並接受最新請求?

[英]how can i stop all ajax request and take the latest one?

我有一個像這樣的按鈕:

<input type="button" id="getresult" value="getresult" />

通過單擊此按鈕,可以激活一個ajax調用請求。 如果我一直單擊該按鈕,那么我會收到ajax請求隊列,這些請求正在命中服務器並等待響應。 但我想殺死所有這些請求,並希望接受最新的一個請求。

$('#getresult').click(function() {

var parameters = {data1:'value1',data2:'value2'};

$.post("getresult.php",parameters,function(msg){ 
    console.log(msg);
},'json');

});

我嘗試了xhr.abort(); 通過將請求分配給此變量。 但是每當我單擊按鈕時,它都會中止所有請求。 我無法獲取最新請求。 例如 如果我單擊按鈕6次,那么將生成6請求,那么我想取消5前一個請求,並希望繼續執行第6個請求。

這是小提琴: http : //jsfiddle.net/s4pbn/308/

禁用按鈕,並在請求完成后將其重新啟用:

$('#getresult').click(function () {
    this.disabled = true;
    var parameters = {
        data1: 'value1',
        data2: 'value2'
    };

    $.post("getresult.php", parameters, function (msg) {
        console.log(msg);
    }, 'json').always(function () {
        this.disabled = false;
    }.bind(this));
});

編輯:

我無法禁用該按鈕。 有一些限制。

真的不確定為什么,然后嘗試:

$('#getresult').click(function () {
    if (this.pendingRequest) this.pendingRequest.abort();
    var parameters = {
        data1: 'value1',
        data2: 'value2'
    };

    this.pendingRequest = $.post("getresult.php", parameters, function (msg) {
        console.log(msg);
        this.pendingRequest = null;
    }, 'json');
});

但是請注意,這只是停止客戶端瀏覽器來偵聽先前的請求響應,而不是服務器來處理任何先前的響應。 第一種方法是更好的恕我直言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM