Javascript 在所有ajax请求完成后执行代码
这是我的代码:Javascript 在所有ajax请求完成后执行代码,javascript,ajax,Javascript,Ajax,这是我的代码: function updateCharts() { for (var i = 0; i < charts.length; i++) { updateChart(charts[i]); } sortQueues(); } function updateChart(chart) { $.ajax({ type: "POST", async: true, data: '{id: '
function updateCharts() {
for (var i = 0; i < charts.length; i++) {
updateChart(charts[i]);
}
sortQueues();
}
function updateChart(chart) {
$.ajax({
type: "POST",
async: true,
data: '{id: ' + chart.Id + '}',
url: "foo/getData",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var parsedResponse = JSON.parse(response.d);
insertChartData(chart, parsedResponse);
},
failure: function (response) {
console.Log(response);
}
});
}
函数updateCharts(){
对于(var i=0;i
更新所有图表后,如何运行
sortQueues()
函数?现在,sortQueues()
函数是在insertChartData
完成之前执行的(因为ajax调用),并且图表不是用html排序的。当然,我不希望有同步调用。$。ajax
返回一个值,以便您可以捕获它们并将其与Promise.all一起使用
首先,还承诺:
function updateChart(chart) {
return $.ajax({
Promise.all(promises).then(array_of_results => {
// all ajax requests recieved at this point
});
然后用map
替换您的循环,这样您就可以在一个数组中获得所有承诺
var promises = charts.map(updateChart);
然后你可以使用承诺:
function updateChart(chart) {
return $.ajax({
Promise.all(promises).then(array_of_results => {
// all ajax requests recieved at this point
});
数据:'{id:'+chart.id+'}',
-这不是有效的JSON!不要通过混合字符串来生成JSON。使用库函数执行此操作<代码>数据:JSON.stringify({id:chart.id}),
可能的重复请记住在发布问题之前检查谷歌。通过谷歌搜索你的确切问题标题,我找到了副本。如果我用var-promises=charts.map(charts)替换loop,那么搜索所需的时间将少于键入所有这些内容所需的时间
应该在哪里启动updateChart?@dafie-我错了。我复制/粘贴了错误的变量名。它应该是charts.map(updateChart)