beforeunload中的ajax会可靠地执行吗?
Will ajax in beforeunload reliably execute?
我有一个HTML5应用程序,需要在用户更改/刷新页面时发送一个断开连接的ajax请求。我目前正在使用这个代码:
window.addEventListener("beforeunload", function(event) {
$.ajax({
url: api_disconnect,
data: { identifier: token },
method: "GET"
});
});
我不需要处理响应,甚至不需要确保浏览器收到响应。我的问题是,我可以依赖服务器接收请求吗?
如果没有,我该如何完成呢?目前,我让应用程序每15秒发送一次"我还活着!"请求(这已经感觉太多了)。我希望服务器在用户断开连接的那一刻就知道。
澄清一下,我知道如果浏览器/电脑崩溃了,我无能为力。这就是心跳的作用。我的意思是在一个正常的用例中,当用户关闭/更改/刷新页面时。
您不能100%依赖ajax调用通过。您可以测试许多浏览器和操作系统,并确定哪些浏览器和操作系统通常会在页面被删除之前收到ajax调用,但任何规范都不能保证这样做。
您正在使用的心跳是最常见的解决方案。这也将覆盖您的网络连接丢失或关机或计算机睡眠模式或浏览器崩溃,beforeunload
处理程序不会。
我看到的另一种解决方法是使用套接字。IO连接到服务器。从套接字开始。io连接有一个小的,非常有效的心跳,服务器会看到套接字关闭,当页面关闭时,你会得到两全其美,因为你会看到一个异常的关闭通过心跳,你会看到一个正常的关闭立即通过webSocket连接关闭。
相关文章:
- Jquery:代码在rails中的页面加载时未执行
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- 对具有ui typeahead的对象中的值执行orderBy
- JavaScript:只有当数组中的所有项都为true时才执行函数
- 用javascript中的param执行动态函数
- 正在停止.在jquery中的特定时间间隔内,每次迭代的每次执行
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 如何在category.php中执行jquery,这应该适用于类别wordpress中的每个帖子
- 无法执行文件.退出Acrobat PDF中的操作
- 在Grails中的gsp中执行jquery代码
- 试图在Windows上执行package.json中的脚本会引发JScript错误
- 如何在ListView项模板中获取按钮来执行不同的操作
- HTML 中的 Javascript 不会执行
- 如何在Odoo 9中执行JS文件中的函数
- bookmarklet中的jQuery.getScript()进行回调,但没有成功执行插件
- 在php中的服务器上执行之前对输入进行消毒
- javascript中同步函数执行中的问题
- 节点.js计划执行中的字符串常量
- 等待函数完成后再继续执行$中的下一个循环.每个函数