簡體   English   中英

我怎么能停止ajax請求(不要等到直到響應)?

[英]How can i stop ajax request (don't wait untill response come)?

如果我使用Ajax發送請求,這個請求需要很長時間.....如果我想發送另一個請求,我該怎么辦?

當前行為第二個請求(我做)等到第一個請求得到響應。

注意:我想在整個應用程序上執行此行為(任何新請求立即執行而不是等待舊的首先完成)我的應用程序使用(Ajax + PHP + jQuery + Symfony)

假設這是第一個請求需要很長時間:

$.ajax
({
    type: "GET",
    url: url1,
    success: function (html)
    {
       // do some thing  
    }
});

在任何時候我都希望這個請求執行並終止第一個請求。

$.ajax
({
    type: "POST",
    url: url,
    success: function (html)
    {
       // do some thing else 
    }
});

var xhrReq;
xhrReq = $.ajax(...);

// then if you want to stop the rqest and exit use :

 xhrReq.abort();

這是一種手動過程,但您可以添加全局xhr對象並在每個請求上對其進行測試。 如果readystate是“正在加載”,則中止它:

var xhr;
var loadUrl = function(url) {
    if ( xhr && xhr.readyState > 0 && xhr.readyState < 4 ) {
        // there is a request in the pipe, abort
        xhr.abort();    
    }
    xhr = $.get(url, function() {
        console.log('success', this);
    });
};

loadUrl('/ajax/');

XMLHttpRequest對象具有中止功能。 您可以使用setTimeout中止占用時間過長的請求。

編輯:如果您不想使用計時器,並且發生應該中止先前請求的新事件,那么事件處理程序應該執行以下操作

if(!this.request) return;  // request contains the XMLHttpRequest
this.request.onreadystatechange = function() {};
if(this.request.readyState != 4) {
    this.request.abort();
}

然后,您可以創建新的XMLHttpRequest對象。

我一直致力於這方面的工作,我覺得我找到了一個有效的解決方案。 我有一個緩存過程導致頁面掛起,直到完成(平均5秒)。 是的,這更適合作為CRON工作,但我需要為用戶創建緩存過程,而不需要知道他們用於CMS的環境。 我做了什么:在變量中創建調用,然后通過硬刪除刪除它。 通過刪除它似乎正在刪除等待。 這種“黑客”似乎將等待從5秒平均拉到325毫秒等待。

var ignore = $.ajax({
    url:something/here.php,
    type: "GET",
    url: url1,
    success: function(){}
});
delete ignore;

定義ajax請求變量:

var xhr;

進行ajax調用:

xhr = $.ajax(...);

中止ajax調用:

xhr.abort();

瀏覽器允許您每次只處理對同一主機的有限數量的請求(我記得2或3,具體取決於瀏覽器)。

請求計數的解決方法是制作虛假域名 - 例如img1.domain.com,img2.domain.com等,導致同一主機並在請求中隨機使用它們。 然后你可以提出你需要的請求。 應根據請求數量選擇域計數以保持邊界 - 每個域2個請求。 否則,第三個請求將等待,直到其中一個活動完成。

它允許您接收來自所有請求的回復。 例如,Google使用它來加快圖片加載速度。

編輯:

示例:您有http://yourhost.com/和別名http://alias.yourhost.com ,它們指向同一個地方。 然后:

$.ajax
({
    type: "GET",
    url: 'http://yourhost.com/somescript.php',
    success: function (html)
    {
       // do some thing  
    }
});

接着

$.ajax
({
    type: "POST",
    url: 'http://alias.yourhost.com/somescript2.php',
    success: function (html)
    {
       // do some thing else  
    }
});

暫無
暫無

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

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