jQuery:同时发送Ajax请求,是否可能?

22

我正在使用jQuery尝试同时检索多个数据。这个需求的背景是不同的数据需要不同长度的时间才能获得,因此我想在每个数据返回时显示它。

问题在于请求似乎是“排队”的; 下一个请求要等到前一个请求返回后才执行。经过广泛的阅读,似乎选项“async: false”可能是我需要的,但这似乎没有任何影响。

从TCP/IP调试中可以看到浏览器不会启动超过一个连接; 它在先前的请求返回时使用相同的连接。

我曾经看到很多网站同时通过ajax加载数据,所以显然这是可能的,但我正在尝试让它工作而感到非常沮丧。

这是我的代码:

$.ajax({
    type: "GET",
    async: false,
    url: "foo1.php"
    });
$.ajax({
    type: "GET",
    async: false,
    url: "foo2.php"
    });
$.ajax({
    type: "GET",
    async: false,
    url: "foo3.php"
    });

4
为什么你没有查看文档?你应该查找你使用的每个选项的含义。 async: false 是你所描述的情况的_相反_。 - Lightness Races in Orbit
3个回答

17

您希望采用异步方式(这是默认设置)。浏览器限制同时最多只能有两个请求。这是 HTTP 规范的一部分。 (HTTP 1.1 规范,第8.1.4节)

把请求放入队列是最好的选择。

值得注意的是,在 Firefox 和其它一些浏览器中可以覆盖这个限制(但由于它不是标准,所以并没有帮助太多)。


18
谢谢。你让我停止在本不存在问题的地方寻找。结果发现这与PHP和它按顺序处理请求的方式有关,因为会锁定会话变量(为什么它不在写入时锁定而是在整个执行期间锁定,看起来很疯狂)。无论如何,“session_write_close()”都可以轻松解决问题。干杯。 - Monty
3
@Monty,很好地指出了关于PHP问题和session_write_close()的部分 - 对我有用 - 谢谢你! - JoshuaDavid
3
刚刚发现这个并通过会话变量解决了我的同时 Ajax 问题。感谢大家的帮助和支持!给你们点个赞! - Codecraft
想知道这个限制采取了哪种形式,Ajax错误?PHP错误?还是静默延迟? - Bob Stein
沉默延迟,就我所知,没有什么不寻常的事情发生——如果你转到http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp,你会看到5个准备状态。如果请求被“排队”,我*敢打赌*它会一直保持在状态0,直到有一个空闲槽位。 - cgp
显示剩余2条评论

3

2
浏览器的行为很好,问题出在 PHP 上。 - Monty

0

使用axios进行Ajax调用更好,可以同时处理多个Ajax请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接