2011-04-14 166 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属性进行了诀窍。你的情况与链接问题中的情况相反,但可能有帮助。