我正在尝试在PUT
事件上发送unload
请求,但请求始终被取消。
这里的答案说不可能:How to perform an ajax call on page unload?
这里的答案表明它有可能:How do I send an AJAX request upon page unload / leaving?
我可以在卸载时发送AJAX请求,如果是这样,我怎么能不被取消。
编辑:我不关心回应,我不需要回复。只需要向服务器发送一些信息,说明页面已经关闭而没有保持活动检查。
答案 0 :(得分:7)
您需要做的就是让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');
});
});
答案 1 :(得分:3)
浏览器正在积极禁止在页面卸载处理程序中执行标准ajax调用,因为等待它完成操作会延迟窗口中发生的下一件事(例如,加载新页面)。尽管您无法使用它进行PUT,但在卸载处理程序中替换同步ajax的方法是sendBeacon
。 sendBeacon
使您可以将数据发送到服务器 ,而无需保留正在执行操作的页面:
window.addEventListener("unload", function() {
navigator.sendBeacon("/log", yourDataHere);
});
浏览器将发送数据而不会防止/延迟窗口中发生的任何事情(关闭它,移动到新的paeg等)。
信标是POST,而不是PUT,但除此之外,这正是您所需要的。