Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 要防止页面重新加载/离开,直到Ajax请求完成吗_Jquery_Ajax - Fatal编程技术网

Jquery 要防止页面重新加载/离开,直到Ajax请求完成吗

Jquery 要防止页面重新加载/离开,直到Ajax请求完成吗,jquery,ajax,Jquery,Ajax,我正在从事一个项目,在这个项目中,我实现了一个AJAX请求,将复杂的数据存储到数据库中。我想防止用户在AJAX请求完成之前重新加载/离开页面。我曾尝试在AJAX中添加async:false,但没有成功 $.ajax({ 标题:{ 'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]).attr('content')) }, url:“{url('api/PlaceOrder')}}”, 类型:“post”, async:false, 数据:数据, processDa

我正在从事一个项目,在这个项目中,我实现了一个AJAX请求,将复杂的数据存储到数据库中。我想防止用户在AJAX请求完成之前重新加载/离开页面。我曾尝试在AJAX中添加
async:false
,但没有成功

$.ajax({
标题:{
'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]).attr('content'))
},
url:“{url('api/PlaceOrder')}}”,
类型:“post”,
async:false,
数据:数据,
processData:false,
contentType:false,
cache:false,
成功:功能(响应){
console.log(“成功”)
}
});

提前谢谢。

你不能。过去有些浏览器允许同步ajax调用,但现在大多数浏览器不允许了


Chrome(可能还有其他)有一个实验性的API()最近开始支持,允许您执行ajax调用,该调用将完成,即使从用户的角度来看,不会阻止关闭页面。但是如果您真的想阻止关闭页面,您就不能这样做。但是,
sendBeacon
可能有助于主动告知服务器用户(可能)离开(作为超时的一种辅助手段)。(“也许”因为当然,他们可能只是在刷新页面或导航到同一应用程序/站点中的另一个页面。)

也许你可以在ajax调用过程中制作一些HTML和CSS。用户可以等到动画完成。比如圆动画。

简单地说,这是不可能的?是的,你不能。这让我抓狂,因为我记不起那个实验API的名称。不过,一个可能的解决办法是设置boolean标志。然后,您可以在卸载前检查
中的标志状态,并确认用户想要离开页面,注意这将影响发送的数据。然后,您可以在AJAX请求完成时重置标志。更好的是,使请求更轻;让它只将数据发送到服务器,然后重新发送稍后在与web服务器无关的后台进程中处理它-假设用户不依赖结果(如果问题是他们过早关闭浏览器,我猜他们不会)Beacon!就是这样。我必须拖网来唤醒我的记忆。我已经这样做了,但一些用户不等待并重新加载页面。当用户单击“后退”按钮时,你可以用js做一些事情,但关于关闭页面,我不这么认为。试图为此找到一个DupiTarget,有几十个潜在的匹配,但他们都有自己的小怪癖k使它们不太适用。(例如,我发现最好的一个,特别想做一个PUT。)我现在放弃。:-)如果用户不想等待并重新加载,我认为您应该检查并尝试改进您的性能。这是一个漫长的过程。返回响应只需不到1秒。我不认为这是一个很长的时间。但6000个用户中的一个重新加载了页面。我不知道为什么。