【问题标题】:php page load delayed until all ajax calls on current page are donephp页面加载延迟,直到当前页面上的所有ajax调用完成
【发布时间】:2018-06-13 08:51:35
【问题描述】:

我有一个 PHP 页面 (index.php),它正在对另一个 PHP 页面进行一些 ajax 调用
(例如:data1.php)用内容填充一些 div。
当我单击另一个菜单项 (companies.php) 时,(companies.php) 页面的加载会延迟,直到 (index.php) 页面上的所有 ajax 调用完成。

但是当我点击另一个页面而不是等待时,我需要停止所有 ajax 调用。
我该如何解决这个问题?

【问题讨论】:

  • 您是否在 AJAX 调用上设置了 async: false
  • @RoryMcCrossan 他们应该异步加载,因为页面需要在加载所有 div 之前加载
  • 没错,这就是为什么我想知道你是否使用过async: false
  • 我没有使用async: false
  • 在这种情况下,您可能已达到服务器允许的最大连接数限制。我建议关注@JainamShah 的回答,并在页面卸载时对任何正在进行的请求调用abort()

标签: php jquery ajax


【解决方案1】:

创建一个 ajax 请求,您可以使用变量来存储它:

var request = $.ajax({
    type: 'POST',
    url: 'url',
    success: function(result){}
});

然后您可以在事件触发 onbeforeunload 时中止请求:

request.abort();

您可以使用一个数组来跟踪所有待处理的 ajax 请求并在必要时中止它们。

var request = [];
request.push($.ajax(...))

var _abortAllRequests = function () {
    $(request).each(function (i, xhr) { xhr.abort(); });
    request = [];
}

$(window).on("beforeunload", function () { 
    _abortAllRequests();
});

【讨论】:

  • 我怎么知道我点击了另一个php页面?
  • 挂钩到onbeforeunload 事件或特定a 元素的click 事件
  • 有多个ajax调用在运行,如何全部停止?
  • 使用数组变量并中止它
  • 你的意思是我应该将每个 ajax 调用添加到一个数组中?
猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
相关资源
最近更新 更多