jquery ajax和谷歌浏览器的问题

时间:2011-04-26 20:30:12

标签: jquery google-chrome onunload

我正在使用jQuery在离开页面时为用户显示确认消息,如下所示:

var changes = false;  

window.onunload =function() { 
    if (changes) {
        $.post("check.php",{undovideokey:VID});
    } else return null; 
};
另一方面

<input type='submit' name='Add' value='submit ' align='right' onclick="changes = true;" /> 

刷新页面时在Google Chrome中运行代码时出现问题。我见过很多像这样的问题,但是答案没有用。

jQuery ajax call in onunload handler firing AFTER getting the page on a manual refresh. How do I guarantee onunload happens first?

window.onbeforeunload ajax request in Chrome

感谢, 萨拉

2 个答案:

答案 0 :(得分:2)

如果我理解正确,那么在页面刷新之后发生了AJAX请求的问题。

更改代码以触发onbeforeunload事件并使用同步AJAX请求可以解决您的问题:

var changes = false;

window.onbeforeunload = function() {
    if (changes) {
        $.ajax({
            async: false,
            url: "check.php",
            data: {
                undovideokey: 'foo'
            }
        });
    } else {
        return null;
    };
};

请注意,这在Chrome的开发人员工具中很难看到,因为它不会在重新加载时保留AJAX请求。您应该验证服务器端的行为或使用Fiddler

之类的工具

工作演示:http://jsfiddle.net/wq4hk/4/show(可通过http://jsfiddle.net/wq4hk/4/进行编辑)

答案 1 :(得分:1)

我注意到,只要您点击“刷新”按钮或按F5(或者它在Mac上的任何内容),浏览器就会尝试在某种程度上维护 javascript状态。当你开发它时,它是一个非常讨厌的功能,因为你想从一个新的状态开始。这可能看起来很愚蠢,但是我要做的是强制一个新的状态是将光标放在地址框中并点击回车。 Chrome会在我开始新会话时处理它,而不会保留任何挥之不去的javascript状态。我只是按下F5来获取依赖于清洁状态和新事件的代码时遇到了很多古怪的行为。