【发布时间】:2018-01-06 06:49:45
【问题描述】:
我有一个需要按特定顺序调用的 15 个以上 ajax 请求的列表。我需要每个 ajax 调用等到前一个函数完成后再进行下一个调用。出现这个问题是因为我的 ajax 调用有一个直接回调,它也是一个 ajax 调用。
createCheckIn() {
this.selectedList = [...] // long list of objects
count = 0
for ( i=0; i < this.selectedList.length; i++ ) {
$.ajax({
method: "POST",
url: url,
data: {
check_in: {
client_id: this.selectClient.id,
program_id: this.program_id
}
},
success: function(res) {
that.createWeighIn(count, res.id)
count = count + 1
},
error: function(err) {
console.log(err)
}
})
}
},
createWeighIn(index, check_in_id) {
let data = {}
let that = this
data.weigh_in = this.selectedList[index]
$.ajax({
method: "POST",
url: url,
data: data,
success: function(res) {
console.log(res)
},
error: function(err) {
console.log(err)
}
})
}
生成了正确的数据,但我认为排序已关闭,因为最终会在前一个条目完成之前开始调用 createCheckIn()。
有没有办法链接这些函数,以便在 selectedList 迭代之前调用(并完成)createCheckIn() 和 createWeighIn()。
【问题讨论】:
-
你希望createCheckIn在selectedList迭代之前完成,但是selectedList在createCheckIn里面迭代,不明白
-
@AniketSahrawat
async: false已弃用。见这里xhr.spec.whatwg.org/#the-open()-method -
我认为问题在于你在 for 循环中基本上一次创建了一堆 ajax 请求,并期望它们按照它们创建的顺序完成处理。
-
可以查看
Promises。 MDN 文档:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript jquery ajax