【发布时间】:2016-05-04 00:56:32
【问题描述】:
我有语言列表,['en', 'de'] 等等,我想为每种语言处理复杂的 ajax 请求。在第一个 ajax 请求中,我得到了每种语言的意图数量。
var languages = ['en', 'de', 'es', 'fr', 'it', 'cn'];
intents_dic = [];
chart_quantity = ['quantity'];
for (var x = 0; x < languages.length; x++){
$.ajax({
url: 'url',
type: 'GET',
async: false,
success: function(data){
for (i in data){
intents_dic.push(data[i]['id'])
}
var intents_count = 0;
var deferreds = [];
在第二步中,我需要计算上一次通话中每个意图的短语数量。我为此任务使用延迟列表。
for (var id = 0; id < intents_dic.length; id++){
deferreds.push($.ajax({
url: 'url',
type: 'GET',
success: function(data){
intents_count += data['templates'].length;
}
}))
}
$.when.apply(null, deferreds).done(function() {
chart_quantity.push(intents_count);
})
但是当延迟的 ajax 请求完成时,完成的顺序与语言列表顺序不同(这是构建图表的主体)。这个问题可以解决,还是ajax调用的一个特性?谢谢。
【问题讨论】:
-
是的,这是一项功能。
-
不要使用
async:false! -
@Bergi 使用闭包而不是同步请求更好吗?
-
如果“关闭”是指“异步回调”,那么是的 - 同步请求不过是麻烦。
-
@Bergi 关闭我的意思是这个例子jsfiddle。它允许使用异步调用。
标签: javascript jquery ajax