, имея небольшую проблему с моей переменной scope в jQuery, как получится, если я делаю console.log за пределами цикла .each, я получаю пустой массив в $ stockData? (Если я сделать это внутри .each, он прекрасно работает, записывает массив со каждый раз, когда добавляется значение)jQuery каждый переменный переменной цикла потерял
$(document).ready(function(){
// stock data will contain all the merged data from the database and yahoo queries
var $stockData = new Array();
// get data from yahoo and merge with dbData, add to stockData array
$.getJSON("/get_portfolio.php", function(dbData) {
$.each(dbData, function(index) {
var stock = dbData[index]
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%3D%22"+stock.stock_symbol+"%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys",
crossDomain: true
}).success(function(data){
var quote = data.query.results.quote;
$.extend(quote, stock);
$stockData.push(quote);
}); // end success
});// end each
}); // end getJSON
console.log($stockData);
}); // end document.ready
забавный факт: JQuery каждый цикл может быть записан в виде '$ .each (dbData, функции (индекс, складочном) {' он возвращает оба индекса и значение по индексу, по умолчанию – stackoverfloweth
I действительно хочу, чтобы jQuery отклонял параметры обратного вызова '$ .ajax' и просто выполнял обещания вместо этого ... – Alnitak
О, вопрос задавался 100 раз в день. Вы не можете ссылаться на переменные, которые установлены в асинхронном обратном вызове. Ajax 101 Это как заказать пиццу онлайн. Вы пытаетесь съесть пиццу, как только вы нажмете кнопку заказа. Проблема в том, что пиццы еще не доставлены, они все еще сделаны. Вам нужно дождаться, когда пицца будет доставлена, прежде чем вы сможете их съесть. – epascarello