2011-04-14 270 views
0

我正在使用ajax和jquery發送一個* synchonou * s http請求到一個web應用程序中的php腳本註銷用戶,如果用戶決定離開頁面而不是註銷。jquery ajax同步http請求

我使用興田以下代碼:

function close() 
{ 
    return "If you exit you will be logged out ...!"; 
} 
window.onbeforeunload = close; 

$(window).unload(function() { 

$.ajax({ 
     url: "logout.php", 
     async:false, 
     success: function(msg){ 
     alert("You have been logged out ...!");} 
});  
}); 

的Ajax是從當我按下後退按鈕的工作在所有情況下分開。當我按後退按鈕,我甚至得到成功功能運行,但當我檢查PHP腳本沒有運行,因爲我有一個fwrite函數在它告訴我它的工作。 除了後退按鈕之外,它還在其他情況下工作。

回答

2

我使用AJAX和jQuery發送asynchonous http請求

在你引用的代碼的請求是同步的,不同步。

如果您看到success函數在您沒有看到PHP代碼正在運行時會被調用,這意味着您的瀏覽器已緩存了以前的結果並重新使用了它。您可能會能夠通過將cache: false添加到您的請求選項旁路。

+0

我剛剛嘗試添加緩存:false,它沒有工作。它可以有任何事實,當我按回它回到另一個PHP腳本? – user434885 2011-04-14 09:06:16

+0

@user:如果你真的看到'success'函數被調用,但是你真的*不*看到PHP的日誌行,我看不到任何其他選項,而瀏覽器使用緩存響應或(道歉)你錯誤觀察。無論如何,在頁面卸載上做任何事情都是非常不可靠的(該代碼在Safari,Opera,IE9,prob。others上不會做你想要的),所以我假設你必須有一個備用(超時,等等) )。我建議不要使用'alert',並簡單地將從卸載中獲得的任何主動註銷作爲*獎金*,而不是實際依賴的任何內容。 – 2011-04-14 09:33:07

0

它可能與瀏覽器後退/前進緩存有關。請查看this answer以瞭解詳細信息,也是該網頁上接受的答案,它與<body>元素的onunload屬性進行了訣竅。你的情況與鏈接問題中的情況相反,但可能有幫助。