我想在循环中调用多个API(例如:$ .each)。我可以使用async:false
模式执行此操作,但这会使脚本滞后。如何在同步模式下实现这一点?只是忽略async
选项只会将list
中的最后一个元素发送到api调用。
$.each(lists, function(index, value) {
channel = lists[index].channel;
list = lists[index].list;
$.ajax({
url : 'api.php?list=' + list + '&from=' + from + '&to=' + to,
dataType : 'json',
async : false,
success : function(data) {
obj = data;
$.ajax({
url : 'api.php?list=' + list + '&from=' + from + '&to=' + to + '&action=sender',
dataType : 'json',
async : false,
success : function(data) {
obj['senders'] = data.msg;
CommonContainer.inlineClient.publish(channel, obj);
}
});
}
});
});
答案 0 :(得分:5)
那是因为channel
和list
是全局的(或者是传递给$.each
的函数范围之外的声明),因此不受闭包的保护。
使用此:
var channel = lists[index].channel;
var list = lists[index].list;
您还应将obj
声明为
var obj = ...