2

我正在使用 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 中运行代码时出现问题。我见过很多这样的问题,但没有有用的答案。

在手动刷新页面后触发 onunload 处理程序中的 jQuery ajax 调用。我如何保证 onunload 先发生?

Chrome 中的 window.onbeforeunload ajax 请求

谢谢,萨拉

4

2 回答 2

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/编辑)

于 2011-04-26T21:21:46.580 回答
1

我注意到,只要您单击“刷新”按钮或按 F5(或者在 mac 上的任何内容),浏览器都会尝试在某种程度上保持 javascript 状态。当您开发时,这是一个非常烦人的功能,因为您想从一个全新的状态开始。这可能看起来很愚蠢,但我强制执行新状态的方法是将光标放在地址框中并按 Enter。然后,Chrome 会将其视为我正在开始一个新会话,并且不会保持任何挥之不去的 javascript 状态。当只按 F5 键获取依赖于干净状态和新鲜事件的代码时,我遇到了很多古怪的行为。

于 2011-04-26T21:13:37.767 回答