当$.ajax()不起作用时,并行调用$
Parallel calls $.when with $.ajax() not working
当
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Sample Title</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> </script>
<script>
$.when(
// Get the first call
$.ajax("delay_test.php"),
// Get the second call
$.ajax("delay_test.php")
).then(function(first,second) {
$("body").append("Done: "+first[0]+"<br>Done: "+second[0]);
});
</script>
</body>
</html>
我还编写了一个php代码来测试这一点,看看它是否真的避免了在第一次调用完成后进行第二次调用。
<?php
sleep(5);
echo date("H:i:s");
?>
但我收到的是5秒的差异:
Done: 15:27:55
Done: 15:28:00
是我做错了什么还是误解了什么?
首先,让我说您可以通过在AJAX请求中使用cache:false
来解决问题:
$.when(
// Get the first call
$.ajax({url:"delay.php",cache:false}),
// Get the second call
$.ajax({url:"delay.php",cache:false})
).then(function(first,second) {
$("body").append("Done: "+first[0]+"<br>Done: "+second[0]);
});
现在让我扩展一下,说我不太确定为什么。chrome正在等待第一个AJAX请求发送第二个请求的结果;也许是在等待它是否应该从缓存中提取结果。也许有更了解Chrome的人可以说出原因。我在IE 11中没有这个问题,也没有测试FireFox、Safari、Opera等。
或者,如果您不想使用对象并定义url
和cache
(cache:false
选项只是在URL上附加一个时间戳,使其唯一(,则可以在URL的末尾附加一个GET变量。类似于:
$.when(
// Get the first call
$.ajax("delay.php?r1"),
// Get the second call
$.ajax("delay.php?r2")
).then(function(first,second) {
$("body").append("Done: "+first[0]+"<br>Done: "+second[0]);
});
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
尽管上面的建议在我的测试中不起作用。
相关文章:
- Javascript/jQuery中的并行Ajax调用
- 并行或串行编写多个 AJAX 调用是否更好
- 并行 AJAX 调用 - 无法接收来自第一个的响应
- 并行调用异步/等待函数
- Ajax/Jquery - 在从服务器返回数据时调用 javascript 函数/使用 ajax 执行并行 SQL 查询
- 使用 tokenInput 进行两个并行 AJAX 调用
- 如何异步并行多个应用程序使用调用
- API调用与node.js中回调的异步并行
- 无法从并行ajax调用中检索数据
- jQuery并行AJAX调用混淆了返回值
- Nodejs并行异步调用,但具有优先级
- 两个并行调用,其中一个在javascript中成功
- 当$.ajax()不起作用时,并行调用$
- 如何从调用堆栈中删除函数并并行运行它
- 使用Async js的异步并行调用
- sails.js通过async.js查找查询,每个查询都是并行调用,每个调用都提前返回
- 在javascript中识别并行异步调用栈
- 调用多个ajax调用与Jquery延迟时,然后(3个并行调用,然后完成一个ajax调用)
- 我怎么能得到一个按钮在闪亮调用JavaScript和R代码并行
- NodeJs 异步编程 - 协调并行调用