Почему несколько вызовов $ .getJSON не работают должным образом? - PullRequest
2 голосов
/ 29 января 2012

Пожалуйста, посмотрите на этот код:

$(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», просто перезагрузив страницу ...

Ответы [ 2 ]

2 голосов
/ 19 июля 2012

Вы можете попробовать вложить запросы, как это

 $.getJSON(urls[0], function(json) { 

    f();

     $.getJSON(urls[1], function(json) { f();

      $.getJSON(urls[2], function(json) { f(); 
      } );

     } );

   } );
0 голосов
/ 16 июня 2012

Ваш пример на самом деле работает так, как вы намереваетесь.Как в Firefox, так и в Chrome я вижу в консоли вывод:

1
2
3
...