如何修复jQuery AJAX调用,阻止用户离开页面?

时间:2018-02-23 23:15:11

标签: javascript jquery ajax

我的页面有两个主要查询 - 项目和类似项目。

该项目正常获取,但类似的项目作为单独的jQuery ajax调用加载,该调用会在页面加载时自动触发。然后将类似的项目附加到页面。第二个查询是分开的,因为它偶尔会很慢并影响用户体验。

$.post(url, function(output) {
  if (output) {
    var data = $.parseJSON(output);
    if (data.success) {
      $("div").html(data.html);
    }
  }
});

我现在注意到,即使在尝试离开时,ajax查询也会阻止页面。浏览器不允许用户离开页面,直到ajax查询返回某些内容 - 相似的项目或没有结果。

我之前没有处理过这种情况。有没有办法以一种不会迫使用户等待它完成的方式构建这个JQuery ajax调用?目前无法解决服务器端响应的速度问题。

UPDATE /解答:

以下作为答案发表。

2 个答案:

答案 0 :(得分:1)

您描述的行为似乎是“请求处于活动状态时浏览器被锁定”
你可能有类似下面的代码:

$.ajaxSetup({
  async: false
  // And other parameters...
})

来自documentation

  

请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。

所以...恢复它的唯一方法是找到代码块并更改它...... OR 再次重新定义async参数,就在{{{}之前1}}执行:

$.post()

答案 1 :(得分:0)

我最终在这里找到了答案:

Asynchronous ajax request locking browser

服务器上的PHP正在锁定会话,并且可以使用ajax调用的服务器端代码中的php session_write_close()来解锁。虽然ajax调用没有返回任何内容,但是单击链接需要下一页的会话,该页面仍然处理ajax调用。