Мне нужно сделать 2 обращения к API, каждый из которых содержит некоторые из общих данных, которые затем должны быть повторены. Вызов 1 получает два JSONP объектов:
[{
"id": 17,
"name": "A",
"campaign_code": "CAP20481"
},{
"id": 18,
"name": "B",
"campaign_code": "CAP20481"
}]
вызова 2 использует идентификатор из первого звонка, чтобы получить целое число. Затем мне нужно соответствующее «имя» и целое число. До сих пор у меня есть:
function getStoreCounts() {
var campaignID = $("input[title='Campaign ID']").val();
var storeLists = $.ajax({
type: "GET",
dataType: "jsonp",
url: "/apiIndex?callback=?&campaign_code=" + campaignID.toString(),
}),
storeCount = storeLists.then(function(data) {
$.each(data,function(i,storeList){
$.extend(storeList,{stores:''});
var getCount = $.ajax({
type: "GET",
dataType: "jsonp",
url: "/apiStoreCount?callback=?&list_id=" + storeList.id.toString(),
});
getCount.done(function(count) {
storeList.stores = count;
});
});
return data;
});
storeCount.done(function(data) {
console.log(data);
$.each(data,function(i,tierCount){
console.log("Tier: "+tierCount.name);
console.log("Stores: "+tierCount.stores);
});
});
}
На заключительном done
возвращения обещание, когда я выйти из массива весь данных, я получаю хранит значения для каждого объекта нетронутыми. Но когда я пытаюсь перебрать каждый объект в массиве, мне не хватает значения магазинов. Добавлен вывод из Chrome.
Ваш вопрос, потому что вы не ждете второй петли AJAX запросов завершить до возвращения 'data'. Вам нужно вернуть эти обещания в виде массива и ждать их всех. Также обратите внимание, что это было бы намного проще (и менее требовательно на вашем сервере), если бы вы вернули всю эту информацию в одном запросе. –