2013-01-04 213 views
0

當點擊刷新按鈕時是否可以停止頁面上發生的所有請求/腳本?
我有一個花費幾分鐘的$ .ajax請求。我試圖在卸載事件中執行window.stop()。我試過xhr = $ .ajax(...);和xhr.abort();以及在互聯網上找到的任何其他方法,並且沒有任何效果

這可能嗎?爲什麼瀏覽器仍然等待該請求完成併發迴響應而不刷新頁面?


以後編輯(解決):似乎等待的問題其實是從服務器。如果在ajax調用中,腳本使用SESSION,則網頁將凍結,直到請求完成,即使我們中止xhr。

這是爲什麼?說明:

會話數據通常在腳本終止後存儲,無需調用session_write_close(),但由於會話數據被鎖定以防止併發寫入,因此只有一個腳本可以隨時在會話上運行。將幀集與會話一起使用時,由於此鎖定,您將體驗逐幀加載的幀。只要完成對會話變量的所有更改,就可以通過結束會話來縮短加載所有幀所需的時間。
停止瀏覽器請求

+0

如果你有一個Ajax請求採取多分鐘,你做錯了什麼已經有... – s1lence

+4

瀏覽器不會等待現有的AJAX請求。您的_server_可能正在等待(例如,對於會話) – SLaks

+0

調用'.abort'應該停止XHR等待響應。你看到什麼讓你說它不起作用? –

回答

4

也許嘗試在刷新之前立即取消,如here

window.onbeforeunload = function(event) { 
    xhr.abort(); 
}; 
+0

OP說他已經叫'abort()' –

+0

對不起,那沒用。我已經試過 – roshkattu

+0

事實上,這解決了_abort_問題。這裏是_xhr.abort(); _ result'XHR BEFORE ABORT:scripts.js:497 Object {readyState:1} scripts.js:498 XHR AFTER ABORT:scripts.js:500 Object {readyState:0 ,status:0,statusText:「abort」} '但頁面仍然等待XHR完成,然後重新加載..似乎它是一個服務器問題...... Slaks告訴我在上面的評論 – roshkattu