jquery ajax 和 google chrome 的问题

发布于 2024-11-03 15:10:55 字数 797 浏览 4 评论 0 原文

我使用 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手动刷新页面后调用 onunload 处理程序触发。如何保证 onunload 首先发生?

window.onbeforeunload ajax 请求Chrome

谢谢, 莎拉

I'm using jQuery to show a confirmation message for the user when leaving the page as follows:

var changes = false;  

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

on the other hand

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

A problem occurs when running the code in Google Chrome when I refresh the page. I have seen many problems like this but there is not helpful answers.

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

thanks,
Sara

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心是晴朗的。 2024-11-10 15:10:55

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

If I understand correctly, your issue that the AJAX request occurs after the page has been refreshed.

Changing the code to trigger on the onbeforeunload event and using a synchronous AJAX request should fix your problem:

var changes = false;

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

Note that this is difficult to see in Chrome's developer tools, since it does not persist AJAX requests across reloads. You should verify the behaviour on the server-side or by using a tool like Fiddler

Working demo: http://jsfiddle.net/wq4hk/4/show (Editable via http://jsfiddle.net/wq4hk/4/)

素手挽清风 2024-11-10 15:10:55

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

I've noticed browsers will attempt to maintain to some extent javascript state whenever you click the "refresh" button or press F5 (or whatever the heck it is on a mac). When you're developing it's a really annoying feature because you want to start from a fresh state. This may seem dumb but something I do to force a fresh state is to place my cursor in the address box and hit enter. Chrome will then treat it as I'm starting a new session and not hold any lingering javascript state. I've run into a lot of quirky behavior when just pressing F5 for code that depends on having a clean state and fresh events.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文