为啥我的 JQuery .ajax 请求不是并行发出的?

Posted

技术标签:

【中文标题】为啥我的 JQuery .ajax 请求不是并行发出的?【英文标题】:Why aren't my JQuery .ajax requests being made in parallel?为什么我的 JQuery .ajax 请求不是并行发出的? 【发布时间】:2011-02-02 04:18:25 【问题描述】:

我正在尝试使用 jQuery 并行发出两个 ajax 请求,如下所示:

    var sources = ["source1", "source2"];

    $(sources).each(function() 
      var source = this;
      $.ajax(
        async: true,
        type: "POST",
        data: post: "data", in: "here",
        url: "/my/url/" + source,
        success: function(data) 
          process_result(data);
        
      );
    );

我从this question 获得了基本结构,但我的请求仍未同时进行。 “source1”需要一段时间才能完成,我可以在服务器上看到第二个请求直到第一个请求完成后才发出。

据我所知,我没有任何其他活动请求,所以我认为浏览器的最大并行请求数不是问题。我在这里错过了什么吗?

【问题讨论】:

你在 Fiddler 或 Firebug 中看到了什么? 我刚刚从那个链接的问题中重新尝试了我的答案,并在 php 页面中添加了一个 sleep(4); - 仍然按预期工作。所有 4 个请求同时触发,并且都需要大约 4 秒才能完成。 后端是在我的开发沙箱中运行的 Catalyst,没有 --fork 选项。 Firebug 中的 Net 面板在第一个请求完成之前不会显示第二个请求。 【参考方案1】:

jQuery 不对 AJAX 请求进行排队。如果您确定您没有发出任何其他请求,那么服务器呢?也许它只有一个工人?

编辑:为了确保,我使用一个脚本对其进行了测试,该脚本将 2 个 AJAX POST 请求发送到一个休眠 5 秒的 PHP 脚本。他们没有排队。

【讨论】:

似乎是服务器相关问题。 是的,在我的开发沙箱中运行我的 web 服务器,没有 --fork 选项,所以它一次只处理一个请求。【参考方案2】:

你在使用 php 吗?你在使用 session_start() 吗?会话不能被多个请求并行打开,它们会一个接一个地等待完成他们正在做的事情。

【讨论】:

男人,我爱你!!!!!!完全忘记了这一点,直到你的帖子浪费了 3 个小时 ;-( 非常感谢法国南部 ^^【参考方案3】:

如果您使用 $.post 而不是 $.ajax 会怎样。这对我有用。

var sources = ["source1", "source2"];

$(sources).each(function() 
  var source = this;
  $.post("/my/url/" + source, post:"data", in:"here", function(data) 
      process_result(data);
  );
);

【讨论】:

以上是关于为啥我的 JQuery .ajax 请求不是并行发出的?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定为啥 jQuery ajax $.post 请求不成功?

为啥 jQuery 的 .ajax() 方法不发送我的会话 cookie?

JQuery 中ajax请求为啥总不到后台 浏览器可以正常访问后台 求解!!!

为啥我收到的是 OPTIONS 请求而不是 GET 请求?

为啥我收到的是 OPTIONS 请求而不是 GET 请求?

jQuery的$.ajax方法支持同时创建多个异步ajax请求吗?而且这些ajax对象必须是并行处理的