我有以下代码:
<script type="text/javascript">
$('#send').click(function({
var foo = array(1,2,...,50);
var max = 5;
for(var i == 0; i < max; i++){
$.ajax({
url: '/ajax.php',
type: 'post',
data: {
id: foo[i]
}
......
})
}));
</script>
我希望脚本检查是否完成了五个ajax函数,接下来将执行5个ajax函数。直到foo的所有元素都被发送到ajax.php,这就是它!
我需要你的帮助。我的英语不好,谢谢!
答案 0 :(得分:0)
您可以尝试这样的事情:
var foo = new Array(50);
var max = 5;
var pointer = 0;
var batchSuccesses = 0;
var batchFailures = 0;
function runNextIfBatchCompleted(){
if(batchSuccesses+batchFailures == max){
batchSuccesses = 0;
batchFailures = 0;
runPostBatch();
}
}
function runPostBatch(){
var currentPointer = pointer;
for(var i = currentPointer; i < Math.min(max*((currentPointer/max)+1),foo.length); i++){
$.post('/ajax.php',
{ 'id' : foo[i] }
)
.done(function(data){
batchSuccesses++;
runNextIfBatchCompleted();
})
.fail(function(data){
batchFailures++;
runNextIfBatchCompleted();
})
pointer++;
}
}
runPostBatch();
这使用jQuery库提供的jqXHR
接口,允许我们在完成5批次时触发done
/ fail
。
您可以在此处看到此操作:https://codepen.io/rhericlya/pen/XqvpWp在您的控制台和网络标签中。 (这使用Get
而不是Post
,但在其他方面是相同的)
你绝对可以提高这段代码的效率,但希望它可以让你知道从哪里开始。