【问题标题】:Problem with jquery ajax and google chromejquery ajax 和 google chrome 的问题
【发布时间】:2011-08-13 08:34:12
【问题描述】:

我正在使用 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

谢谢, 萨拉

【问题讨论】:

  • 那么,究竟是什么问题呢?我在您的帖子中没有看到任何问题。

标签: jquery google-chrome onunload


【解决方案1】:

如果我理解正确,您的问题是在页面刷新后发生 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/ 编辑)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • +1 表示不知道如何刷新 Mac。我很长时间都不知道,但显然它是苹果键 + R
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2010-12-17
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多