jquery - 使用 "unload"事件自动保存并在注销时调用 ajax : order of actions is causing an issue

标签 jquery ajax events onbeforeunload

我正在在线编辑器上使用自动保存功能。

当用户离开页面时(通过 unloadbeforeunload 事件检测到),我将发送 AJAX 请求 (async = false) 来保存数据。

我在 Firefox 中遇到问题,有时在 Chrome 中也遇到问题,因为发生了一系列事件:

  • 事件已触发
  • 请求发送
  • 页面更改且用户断开连接
  • 服务器分析请求 => 问题!
  • 浏览器收到请求响应

当然,由于用户已断开连接,因此无法处理“保存”请求。

有没有一种方法可以与所有浏览器兼容,在页面实际更改之前等待 AJAX 调用的响应?

最佳答案

ori的回答是正确且完整的。

但从您的情况来看,您可以使用解决方法。

您可能对两个 JavaScript 功能感兴趣: localStorage 和 sessionStorage(除了浏览器关闭时清除第二个存储之外,它是相同的,因此您可能会选择第一个)

这个想法是将数据保存到 localStorage,并使用一些元数据来说明是否保存了更改。如果用户离开页面但转到您服务中的另一个页面,甚至稍后返回 - 您可以再次发送数据,并包含一些由于页面卸载而未保存的信息。

概念验证代码:

$(window).bind('unload', function() {
    localStorage.setItem('unsavedData',data);
    localStorage.setItem('unsaved',true);
});

$(document).ready(function(){
    if(localStorage.getItem('unsaved')){
       //ajax send 
       localStorage.setItem('unsaved',false);
    }
});

[编辑]

我已经成功地将 JSONP 与 unload 一起使用,并且它似乎在大多数情况下都能工作,但我还没有在负载和慢速网络上测试它。

关于jquery - 使用 "unload"事件自动保存并在注销时调用 ajax : order of actions is causing an issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333721/

相关文章:

jquery - 使用 Jquery 的类似 Tabbar 的效果

php - 无限滚动for循环 block

php - 基于 AJAX/PHP 的大文件上传进度条

php - AJAX 请求无效

jquery - 更改元素类型,保留 jQuery 事件处理程序

javascript - Event.target.value 未正确检索值

javascript - 如何通过超时和监听器创造 future

javascript - 验证不适用于 js

javascript - 如何在 HTML 页面上实时动态显示多个行框上标题框中的文本?

javascript - 按下按钮时无法使用 jquery 打印字符串