2010-02-21 68 views
4

我的JavaScript需要一些數據發送到服務器時,該頁面將關閉,這是我目前做同步AJAX(SJAX?)在window.onbeforeunload請求。當然,問題在於,如果我的服務器耗時過長或者網絡連接中斷,瀏覽器將凍結。的Javascript同步AJAX超時

從我讀過的東西,這是不可能指定同步AJAX請求超時和異步AJAX請求不要window.onbeforeunload工作。如何解決這個我最好的猜測是使用異步請求,然後鎖住瀏覽器一段時間,讓請求處理:

window.onbeforeunload = function() { 
    doSomeAjax(); // asynchronous request 

    var now = new Date(); 
    var time_limit = now.getTime()+2000; // 2,000 ms 
    while(now.getTime() < time_limit) { 
    now = new Date(); 
    } 
} 

將這項工作?這種方法有什麼潛在的問題嗎?

+0

我個人覺得這整個的方法可能需要改變。窗口關閉事件非常棘手,在一個瀏覽器上運行的是肯定會在另一個瀏覽器上發生的。你能告訴我們更多關於你的目標嗎?然後有人可能會提出一種不同的方法。 – e4c5 2010-02-22 08:40:08

回答

0

你的問題是,瀏覽器凍結,而你試圖通過手動凍結在一個循環中的瀏覽器來解決它。這也會凍結UI線程,所以這不是一個潛在的問題,這是一個明確的問題。

由於瀏覽器關閉時,我猜你不需要從Ajax響應收到任何反饋,正在關閉更新的頁面?在這種情況下,也許你可以通過注入IMG標籤到,比方說,一個隱藏DIV,他們src屬性設置您想請求的URL解決您的問題。

+0

如果瀏覽器隱藏在div中並且窗口/選項卡正在關閉,瀏覽器是否仍會獲取「圖像」? – igul222 2010-02-21 17:40:52

+0

我想象它可能。但你必須做自己的實驗才能找到答案,我從來沒有理由自己嘗試。 – 2010-02-22 07:46:36