gpt4 book ai didi

当延迟 Ajax 请求完成时,Jquery Each 循环一个又一个

转载 作者:行者123 更新时间:2023-12-01 07:07:32 25 4
gpt4 key购买 nike

我一直无法解决这个问题,并且我发现了很多类似的例子,但似乎没有什么真正有效或适用于我的情况。

我的代码如下

$.each(versions, function(key,value) {
progressText.html("Downloading Version " + value);
ajaxUpdate('download',value).then(console.log(value));
});

function ajaxUpdate(step,value) {
return $.ajax({
url: 'action/' + step + '.update/',
data: 'version=' + value
})
}

基本上我的问题是它同时执行每个,我希望它完成每个任务,然后继续下一个。

我该怎么做?

最佳答案

你可以使用jQuery.Deferred()对象来一一发出ajax请求。如果您想在所有请求完成后调用某个函数,请在 each 循环之后使用 defer.then(...):

function ajaxUpdate(step,value) {
return $.ajax({
url: 'action/' + step + '.update/',
data: 'version=' + value
})
}

// Emulate resolved deferred to be able to chain to it in each loop
var defer = $.Deferred().resolve();

$.each(versions, function(key, value) {
// Add next deferred to chain, it will be invoked when previous is completed
defer = defer.then(function(){
return ajaxUpdate('download', value)
});
});

defer.then(function(){
console.log('All requests completed')
})

超时示例

var $log = $('#log');

function ajaxUpdate(url, step) {
return $.Deferred(function() {

setTimeout(function() {
$log.append('<p>finished:' + step + '</p>')
this.resolve();
}.bind(this), Math.random() * 1000)

})
}

var defer = $.Deferred().resolve();
var versions = [1, 2, 3, 4, 5];

$.each(versions, function(key, value) {
defer = defer.then(function() {
return ajaxUpdate('download', value)
});
});

defer.then(function() {
$log.append('<p>All Done</p>')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="log"></div>

关于当延迟 Ajax 请求完成时,Jquery Each 循环一个又一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com