【发布时间】:2017-10-03 08:56:10
【问题描述】:
我无法在循环中的 ajax 请求之间进行延迟。 我希望脚本等待 7 秒来执行下一个。请求并不相同,我不知道其中有多少。
$(document).ready(function () {
var announce = $("#announce").data('id');
var lots_cnt = parseInt($("#announce").data('lotscnt'));
for (var i = 0; i < Math.ceil(lots_cnt/20); i++) {
$.ajax({
method: "GET",
url: "/project/lots/"+announce+"/"+(i+1),
async: false,
beforeSend: function () {
$("#console").append("<strong>Parsing lots from page "+(i+1)+"...</strong><br/>");
},
complete:function(){
},
success: function (m) {
$("#console").append(m);
addprogressstep();
setTimeout(function() { $("#console").append("Waiting 7 sec ...<br/>"); }, 7000);
},
error:function(jqXHR, textStatus, errorThrown){
}
});
};
});
【问题讨论】:
-
setTimeout()。也就是说,如果可以避免,发送这么多 AJAX 请求并不是一个好主意。如果可能的话,我建议考虑在一个请求中发送所有数据。但是,您应该绝对删除async: false,因为这是一种可怕的做法 - 如果您检查控制台,您甚至会看到浏览器告诉您不要使用它。 -
它看起来并没有那么多请求,它在 1 到 6 之间,所以我认为浏览器和网络对此很好。不幸的是,我不能发出一个请求而不是这个循环,我需要这个延迟来避免“429 Too Many Requests”错误。
-
浏览器可以使用它,但是如果您有 N 个用户 * N 个请求每分钟发送到服务器,您的服务器/托管公司可能不会。
-
@ГлебГарипов 如果您在实施我的答案时需要帮助,请告诉我
-
@TKoL 感谢您提供帮助,非常感谢。你给了我一个如何解决我的问题的想法。我将在您的答案下方描述我的解决方案。
标签: javascript jquery ajax settimeout delay