【发布时间】:2018-08-08 14:11:05
【问题描述】:
我需要多次运行 php 脚本,但需要使用唯一的 ID。 该脚本每次运行需要 +- 5 秒(将一些文件下载到服务器等..) 首先,我使用 ajax 调用来执行此操作,但问题是这需要按顺序进行,并且使用默认的 ajax 设置同时运行多个实例会产生奇怪的事情。 我将参数 'async' 更改为 'false' 解决了这个问题,因为现在 javascript 在开始下一次迭代之前等待脚本完成。
控制台警报每 5-6 秒弹出一次,我提醒每个帖子的数据,循环等待我点击警报(好)。
我尝试将数据附加到 div 而不是提醒,而是仅在所有迭代完成后才附加。
为什么?
var arr = ["10","20","30"];
$("button").click(function(){
$.each(arr, function( index, value ) {
console.log( index + ": " + value );
$.ajax({
url: "import_xml_single_post.php",
type: "post",
data: {'import_id' : value},
async: false,
success: function(data){
$( "#result" ).append( data );
//alert(data);
}
});
});
<body>
<button>Click me</button>
<div id="result"></div>
</body>
【问题讨论】:
-
问题完全是由
async: false引起的。浏览器实际上会向您显示有关其使用的警告,这是一种不好的做法。相反,从前一个回调中进行下一个 AJAX 调用。递归是理想的选择。更好的是,*不要像这样打多个电话。它只是不必要地淹没服务器。修改服务器端逻辑使用的模式,并在单个请求中发送所有数据。 -
不要使用同步 ajax 调用,如果您需要确保 ajax 仅在其他 ajax 结束后执行,您应该存储回调并仅在其他 ajax 完成后调用它们
标签: javascript jquery ajax