如何在页面卸载/离开时发送AJAX请求
How do I send an AJAX request upon page unload / leaving?
window.onbeforeunload = function() {
return $j.ajax({
url: "/view/action?&recent_tracking_id=" + $recent_tracking_id + "&time_on_page=" + getSeconds()
});
}
这是我所拥有的,但它返回一个警报[object object]
我如何执行AJAX?
注意:当我不返回任何东西时,服务器不会显示它正在接收ajax请求。
您不需要返回任何东西,只需触发ajax调用。
window.onbeforeunload = function(e) {
e.preventDefault();
$j.ajax({ url: "/view/action?&recent_tracking_id=" + $recent_tracking_id + &time_on_page=" + getSeconds()
});
}
如果你使用的是jQuery,你可以尝试绑定到。unload()事件。
onbeforeunload允许您返回一个字符串,该字符串显示在'您想要离开'确认中。如果不返回任何内容,则正常退出该页。在本例中,您将返回由JQuery ajax方法返回的jqXHR对象。
您应该只执行Ajax调用而不返回任何内容。
为什么要返回函数对全局池的引用?应该是这样的:
window.onbeforeunload = function() {
$j.ajax({
url: "/view/action?&recent_tracking_id=" + $recent_tracking_id + "&time_on_page=" + getSeconds()
});
}
据我所知,onbeforeunload函数只会返回一个警告。这样做是为了防止几年前烦人的弹出窗口。
我正在构建一个聊天客户端一段时间后,我能想出这样做的唯一方法是做一个setInterval函数,更新时间戳,然后检查超时用户并删除它们。这样,在一定时间间隔内没有"签到"的用户将被其他仍在登录的用户从房间中移除。
不漂亮,也不理想,但却奏效了。
在页面卸载处理程序中执行标准ajax调用被浏览器主动禁用,因为等待它完成会延迟窗口中发生的下一件事(例如,加载新页面)。
在罕见的情况下,当您需要在用户从页面导航时发送信息时(正如Aaron所说,尽可能避免这种情况),您可以使用sendBeacon
。sendBeacon
允许您将数据发送到服务器,而无需占用您正在执行的页面:
window.addEventListener("unload", function() {
navigator.sendBeacon("/log", yourDataHere);
});
浏览器将发送数据,而不会阻止/延迟窗口中发生的任何事情(关闭窗口,移动到新页面等)。
注意unload
事件可能不可靠,特别是在移动设备上。您也可以将上述操作与在visibilitychange
上发送信标结合起来。
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- "日期“;AJAX请求返回的类型值未定义
- 在等待ajax请求时显示微调器并禁用页面
- 跨域ajax请求
- Ajax请求返回空的数据字符串,但首先得到了正确的数据
- Javascript-如何让脚本与Ajax请求的数据一起运行
- ajax请求成功,但可以'我看不到我的数据
- 如何将给定的curl命令复制为jquery ajax请求
- 为什么我能够从javascript控制台发送跨域ajax请求
- 一台特定计算机的Ajax请求数据未定义/失败
- 获取ajax请求的请求头
- 原型Ajax请求参数为嵌套json
- 可以't从AJAX请求中筛选数据
- jQuery Mobile Collapse上的AJAX请求
- 暂停函数执行流程,直到ajax请求完成