Пожалуйста, посмотрите на этот код:
$(document).ready(function() { var urls = ['http://en.wikipedia.org/w/api.php?action=query&titles=File:Einstein2.jpg&prop=imageinfo&iiprop=url&iiurlwidth=144&format=json&callback=?', 'http://en.wikipedia.org/w/api.php?action=query&titles=File:Da_Vinci_Vitruve_Luc_Viatour.jpg&prop=imageinfo&iiprop=url&iiurlwidth=144&format=json&callback=?', 'http://en.wikipedia.org/w/api.php?action=query&titles=File:2003-32-GravitationalLens.jpg&prop=imageinfo&iiprop=url&iiurlwidth=144&format=json&callback=?']; var x = 0; var f = function() { x++; console.log(x); }; $.getJSON(urls[0], function(json) { f(); } ); $.getJSON(urls[1], function(json) { f(); } ); $.getJSON(urls[2], function(json) { f(); } ); });
Результат этого кода "1", в то время как я ожидал "1 2 3".
Я виделрешения этого (например, в этот вопрос ).Но я все еще не могу понять, почему данное решение должно работать, а код выше не должен.
ДОБАВЛЕНО: Когда я помещаю некоторый код между вызовами $ .getJSON или изменяю console.log() to alert (), на самом деле вывод «1 2 3».Когда эти методы вызываются точно друг за другом, в Chrome выводится «1».
ДОБАВЛЕНО: Странная вещь.Совершенно не меняя код, я получил 3 разных выхода: «1», «1 2», «1 2 3», просто перезагрузив страницу ...
Вы можете попробовать вложить запросы, как это
$.getJSON(urls[0], function(json) { f(); $.getJSON(urls[1], function(json) { f(); $.getJSON(urls[2], function(json) { f(); } ); } ); } );
Ваш пример на самом деле работает так, как вы намереваетесь.Как в Firefox, так и в Chrome я вижу в консоли вывод:
1 2 3