2011-12-12 252 views
1

我:取消XHR請求

function send(){ 
    $.get("/site/send.php", function(data){ 
    alert(data); 
    } 
} 

在網站/ send.php我:

sleep(1000) 
echo "OK"; 

接下來,我在我的js文件:

send(); 
$("#click").click(function(){ 
    $.get("/site/reset.php", function(data){ 
    alert(data); 
    } 
}) 

和復位.php:

echo "RESET"; 

在這個例子中,我有XHR直到睡眠< 1000.在Firebug中我看到了這個。我沒有響應和成功的函數send(),直到睡眠爲< 1000.這是好的,但我想取消這個請求,如果我使用.click()。

現在我有所有的時間函數send(),直到她不停止(> 1000),然後我沒有用.click()函數開始。爲什麼這不是異步?

這可能嗎?也許有可能取消網站上的所有請求?

+1

你可以有一箇中間PHP腳本來管理任務。所以,你調用AJAX函數,然後調用Manager.php腳本。然後,Manager.php腳本運行更多的Worker1.php,Worker2.php,.. WorkerX.php腳本(並且不會等待它們完成,只需使用CLI啓動它們),它們將執行工作並更新工作狀態數據庫表。在此之後,您可以使用AJAX輪詢來檢查狀態一次和一段時間,並且您可以將工作人員標記爲在狀態表中執行(然後您檢查工作人員)。這是一個工作,但希望它有助於:) – Catalin

+0

謝謝,請給我簡單的例子:) –

回答

4

您必須保留對XHR對象的引用,以便中止它。

事情是這樣的:

var myXhr = null; 
$("#click").click(function(){ 
    myXhr = $.get("/site/reset.php", function(data){ 
    alert(data); 
    }); 
}) 

然後中止:

if (myXhr) { 
    myXhr.abort(); 
} 

雖然我真的不確定的語法。

你可能想看看somesimiliarquestions

5

您所做的每個請求實際上都是一個單獨的實例或線程。您不能通過發出另一個請求來取消一個請求。你可以做的是在客戶端取消當前的請求。閱讀this question