2009-04-28 124 views

回答

7

不,絕對沒有簡單的方法。

我能想到一些複雜的方法,但它們不可靠。

你可能有更多的運氣開發倒車的過程從請求你剛剛運行(我假定這就是你想停止它的原因。)

+0

發現xhr.abort()

解決方案提示的原因是從佔用資源,沒有真正經過修改的DB做停止一個漫長的過程。 thx回覆 – AndreLiem 2009-04-28 21:06:07

0

最簡單的變化方式只是發送一個503(或類似的)HTTP響應標頭並中止服務器端應用程序(或者只是中止應用程序)。假設沒有數據發送和/或您檢查了HTTP響應頭客戶端,您可以將其視爲失敗的請求。

0

簡短答案是「否」。除非你在談論服務器端的長時間運行後臺進程,在這種情況下,你可能會有第二個Ajax請求啓動一個停止。但是,如果您正在討論對Apache/PHP服務器的常規請求,那麼請不要...確定您的請求運行在哪個Apache線程上就足夠麻煩了。

在啓動過程之前,以某種方式驗證您的Ajax請求會容易得多;確保它是你想要運行的。如果你需要用戶知道他們正在做的事情不能被打斷,你也可以有一個Javascript確認過程。

正如史蒂文張貼,有一個逆轉過程聽起來像它也可能是你最好的利益。

4

啓動另一個Ajax請求。我發現這個線程試圖找出如何防止在調用另一個請求時中斷先前的請求。

1

沒有什麼好的方法可以通過網絡自行停止請求(正如很多人所說的那樣),但是阻止請求的效果相對容易。例如

在服務器端:您可以通過不斷檢查全局變量(充當標誌)(如cookie或會話)(您可以通過exit(或任何您需要殺死腳本的術語)腳本的執行)。此外,您可以將文件或數據庫條目保存爲標誌(您可以查詢是否存在)。在客戶端:你可以調用abort(在其他瀏覽器中不起作用,就像其他人說的那樣),或者你可以在回調的頂部保留一個全局信號/標誌值看它是否應該仍然執行)。例如:

window.ajaxIsStillGood = true; 

xhr.onreadystatechange = function() 
{ 
    if(4 === xhr.readyState && 200 === xhr.status) 
    { 
     if(true === window.ajaxIsStillGood){ /* still good */ } 
    } 
} 

/* bad stuff happens */ 

window.ajaxIsStillGood = false; // now the code won't execute 
-1

如何發送另一個Ajax請求,將改變它是由漫長的過程監控特定$_SESSION變種?

0

對於PHP我找到了一種方法來停止或中止使用session_write_close();。只需在腳本中輸入session_start()即可。如果您正在使用framwework或OOP,請將其保留爲方法的第一行。發生這種情況是因爲會話數據被鎖定,直到ajax完成。

測試&看到了另一個頁面中現在載入後點擊這裏 Abort Ajax requests using jQuery