2010-11-20 66 views
3

我想在用戶離開頁面時執行後期查詢。我正在使用的代碼是window.onbeforeunload執行查詢

<script type="text/javascript"> 
window.onbeforeunload = function(){ 
    var used = $('#identifier').val(); 
    $.post('conversation.php?leave=true',{ud:used}); 
} 
</script> 

我在這裏做什麼有什麼不對嗎?我在FF錯誤控制檯中得到的結果只是說其他非相關函數/變量沒有定義(因爲它們正在卸載)。任何提示或指針,我需要解決什麼?

+1

那麼它工作與否? – Alex 2010-11-20 22:56:26

+0

不,對於conversation.php?leave = true的帖子應該會產生數據庫更新。它不是。 – Ryan 2010-11-20 22:57:32

+0

而不是進行數據庫調用,採取一些cookie的方法.. – kobe 2010-11-20 23:21:15

回答

5

答案很簡單,你不能在beforeunload事件的異步AJAX調用可靠,它會非常之前完成,因爲瀏覽器的垃圾收集的頁面可能被終止。您可以使同步調用,就像這樣:

$.ajax({ 
    type: "POST", 
    url: 'conversation.php?leave=true', 
    data:{ud:used}, 
    async: false 
}); 

做到這一點,雖然,因爲它捕捉您在網頁中用戶超過需要的時間更長,防止他們離開,導致消極體驗。請注意,這也執行時鎖定瀏覽器async: false應避免在任何情況下可能。

+0

@Nick,那麼什麼是真正的使用async:false,它真的很有用或在任何地方使用.. – kobe 2010-11-20 23:07:01

+0

嗯......我可能會認爲,如果它是僅僅因爲所做的查詢需要0.006秒才能執行。 http://seewhosoutthere.com/conversation?leave=true – Ryan 2010-11-20 23:12:03

+0

@ryan,它可能不是真的在所有情況下取決於互聯網連接,您的數據庫負載,網絡服務器負載等 – kobe 2010-11-20 23:14:32