Я только начал работать с JavaScript для нетривиальных вещей, так что это, вероятно, просто ...
То, что я пытаюсь сделать: перебрать массив ссылок на товары, получить JSONдля каждой ссылки и вернуть массив всей информации о продукте (с хэш-подобной структурой, проиндексированной по ссылке).
Что я пробовал:
function fetchProductData(references){
var product_data = new Object();
references.forEach(function(ref){
$.ajax({
url: "http://localhost:3000/products/find.js?reference=" + ref,
dataType: "jsonp",
type: "GET",
processData: false,
contentType: "application/json",
success: function(data) {
product_data[ref] = data;
}
});
});
alert('before return: ' + product_data);
return product_data;
};
$(document).ready(function(){
var products = fetchProductData(references);
alert('products : ' + products);
});
Вот что я надеваюне понимаю: когда я в первый раз вызываю alert
для отображения содержимого массива, массив пуст.Однако при втором вызове массив заполняется нужными мне данными.
Другими словами, «products:» alert
отображает данные, которые я хочу, в приведенном выше коде.Но если я прокомментирую «до возврата: alert
», это больше не будет.Почему это так?
Итак, мой вопрос: как я могу сделать так, чтобы jQuery сделал несколько вызовов $ .ajax для получения информации о продукте, сбора этой информации в массив и возврата этого массива, чтобы я мог использовать ее в другом месте в моемcode?
Кроме того, почему данные в переменной магически доступны после того, как на них есть ссылка в alert
?