2015-04-02 58 views
-1

我有巨大的ajax應用程序。有時用戶關閉瀏覽器時,Ajax無法正常工作。發生這種情況是因爲他們的瀏覽器中安裝了許多第三方添加器,可能會停止(可能)正常工作ajax。強制ajax在所有瀏覽器中工作

現在我無法控制用戶,所以無法讓用戶小心瀏覽器。現在我能在這種情況下做什麼。即使在瀏覽器中安裝了錯誤的擴展程序,是否有任何方法可以強制ajax工作?

下面的代碼無法正常工作時,糟糕的擴展(如問工具欄,阿里巴巴股票新聞等)安裝在瀏覽器

window.onbeforeunload = function() { 

    $.ajax({ 
     url: site_url + '/agent/send_offline', 
     type: 'post', 
     cache: false, 
     async: false, 
     ... 
    }); 
}; 
+1

是否有一個特定的原因,你需要做這個同步而不是異步? – Nanne 2015-04-02 07:22:58

+0

,因爲我想先完成ajax請求,然後用戶才能關閉瀏覽器。是async:true有什麼特別的設施來解決這個問題? – 2015-04-02 07:41:29

回答

3

當用戶離開你的頁面時,你不能總是能夠做一個Ajax調用。這僅僅是你在瀏覽器中不可靠的事情。它有時可能有效,但不能保證以一種可以關閉網頁的方式工作。

有一些變通辦法:

  1. 你可以保持您的頁面與服務器的WebSocket連接,並在用戶離開頁面時,插座會自動被瀏覽器和服務器關閉然後會知道用戶離開了該頁面。

  2. 你可以讓你的頁面每隔幾分鐘用一個簡單的ajax調用來輪詢你的服務器,當服務器不再接受輪詢ajax調用時,它知道頁面已經關閉。

+0

1.Websocket不支持所有瀏覽器 2.您是否在談論運行cronjob? – 2015-04-02 07:30:28

+0

所有現代瀏覽器都支持websocket。你需要支持多久?此外,websocket不一定是唯一的機制,只是在可用時使用的最佳機制。沒有完美的解決方案,適用於所有瀏覽器。您需要確定哪種組合可以爲您提供最佳結果。我不明白你在問一個cronjob。該頁面將通過JavaScript計時器輪詢服務器。 – jfriend00 2015-04-02 07:42:49

+0

我至少需要IE7 +。如果沒有cron作業,瀏覽器停止發送請求時服務器如何執行代碼? – 2015-04-02 07:47:35

0

你可以做到這一點通過在瀏覽器中存儲的cookie每miniute其中Ajax代碼後,打電話給你的頁面被放置。嘗試這個角度

相關問題