【问题标题】:jquery $.when and Simultaneous request issuejquery $.when 和同时请求问题
【发布时间】:2015-10-21 04:43:05
【问题描述】:

我编写了我的第一个 $.when 例程,但没有按预期工作:

     $(document).ready(function () 
     {
      var   UserUrl = 'API/StartGetUser.asp';
      var   StoreUrl = 'API/StartGetStore.asp';
      var   FeedbackUrl='API/StartGetFeed.asp';
      var   ItemsUrl='API/StartGetSellers.asp';
    $.when(
        $.get(UserDetailsUrl),
        $.get(StoreCategoryUrl),
        $.get(FeedbackUrl),
        $.get(ItemsUrl)
    ).then(function(user,store,feed,items) {
        //$.get(mailUrl)
        alert(user+' '+store+' '+feed+' '+items);
    }).fail(function(err) {
      alert(err);
    });

它有效,但我期待 4 get 会同时触发,而我发现在前一个完成后执行... 因为是

$.get

肯定是异步的..

有什么问题吗? 我要检查什么?

顺便说一句,服务器端是经典的 asp,请求在同一台机器上,从 url 可以看出。

感谢任何提示

【问题讨论】:

  • 我想你的意思是说它是同步的而不是异步的,但这并没有真正的意义。你怎么知道它们没有被立即发送?
  • $.get() 在您完成 ajaxSetup({async: false}) 之前不会同步
  • 是的,我的意思是它似乎是同步工作的,但 $.get 只能异步工作。因此这不是设置的问题。我看到由于效果延迟而没有同时处理

标签: jquery simultaneous


【解决方案1】:

四个请求一个接一个地发起,因为 Javascript 是按顺序执行代码的。 Javascript 中没有实际的并行执行(它是单线程的 - 除了此处未涉及的 webWorkers)。

这里会发生的是所有四个请求都将同时“处理中”。确切的响应何时返回取决于服务器的响应能力。一些服务器一次只处理一个请求,并且会导致响应按顺序返回,即使它们都是一次启动的。其他服务器将以时间分片方式(甚至使用多个处理器)处理它们,以便所有响应大约在同一时间完成。

您可以在操作前打开 Chrome 调试器中的网络选项卡,然后查看它显示的时间跟踪,以验证发送请求和接收响应的时间。

【讨论】:

  • 嗨,谢谢你的回答,但我有点困惑......我找到了几篇文章解释这是同时执行请求的方法:linklink@ 987654323@jsfiddle 和我的服务器目前可以同时处理更多请求
  • 无论如何.. 哪个可以解决这个问题?现在,当我需要更快地执行某些过程时,我会从 2 个不同的浏览器触发同一页面,因此我假设浏览器限制基于 sessionID:jqyery ajax 是否可以处理 sessionID?还是有其他技术可以
  • @Joe - 这是让多个 Ajax 请求并行运行的通用技术(如果您的服务器能够这样做)。如果您可以在运行代码时从 Chrome 调试器中发布网络选项卡时间线,我们或许能够从中收集到一些关于正在发生的事情的信息。最终由您的服务器决定它们实际运行的并行量,因此可能需要在您的服务器上进行检测和调试才能完全理解事物。
  • @Joe - 浏览器确实对它们将打开的同一主机的最大并发连接数有限制。这个确切的限制因浏览器而异,但对于现代浏览器来说,这个限制肯定应该高于 3(更可能在 6-10 范围内),所以如果你有一堆其他事情在同一个主机上进行(比如图像下载) ,那么您也可能会遇到此限制。
  • 此处 Chrome 屏幕截图:!IMG 关于服务器,它是 Windows Server 2012 R2,但运行的经典 asp 不允许超过 1 个具有相同 sessionID 的进程。 (或者可能是我无法正确设置)但是如果我使用 4 个不同的浏览器访问同一页面.. 它会同时处理所有 4 个请求。我认为 jquery ajax 会有自己的会话 ID .. 但似乎没有.. 有没有办法用 jquery ajax 请求更改 sessionID?谢谢你的时间乔
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2011-02-27
  • 2020-05-28
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
相关资源
最近更新 更多