Dou*_*ell 5 javascript ajax jquery
我正在尝试发送PUT
关于该unload
事件的请求,但请求始终被取消.
这里的答案说不可能:如何在页面卸载时执行ajax调用?
这里的答案表明它是可能的:如何在页面卸载/离开时发送AJAX请求?
我可以在卸载时发送AJAX请求,如果是这样,我怎么能不被取消.
编辑:我不关心响应,我不需要回复.只需要向服务器发送一些信息,说明页面已经关闭而没有保持活动检查.
您需要做的就是使ajax调用同步.这样浏览器将在关闭窗口/选项卡之前等待响应,并且不会被取消.
$(window).unload(function(){
$.ajax({
type: 'PUT',
url: '/your_url.php',
async:false, //IMPORTANT, the call will be synchronous
data: {}
}).done(function(data) {
console.log('complete');
});
});
Run Code Online (Sandbox Code Playgroud)
在页面卸载处理程序中执行标准 ajax 调用被浏览器主动禁用,因为等待它完成会延迟窗口中发生的下一件事(例如,加载新页面)。虽然你不能用它做 PUT,但是卸载处理程序中同步 ajax 的替代品是sendBeacon
. sendBeacon
允许您将数据发送到您的服务器,而无需阻止您正在执行的页面:
window.addEventListener("unload", function() {
navigator.sendBeacon("/log", yourDataHere);
});
Run Code Online (Sandbox Code Playgroud)
浏览器将发送数据而不会阻止/延迟窗口中发生的任何事情(关闭它,移动到新的 paeg 等)。
信标是 POST,而不是 PUT,但除此之外,它正是您要寻找的。