为什么多个$ .getJSON调用没有正常工作?

时间:2012-01-29 12:00:58

标签: javascript jquery ajax json getjson

请看一下这段代码:

$(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”。

我已经看到了解决方案(例如,在this SO question中)。但我仍然无法理解为什么给定的解决方案应该工作,上面的代码不应该。

增加: 当我在$ .getJSON调用之间放置一些代码或将console.log()更改为alert()时,输出实际上是“1 2 3”。当这些方法彼此完全相同时,Chrome输出变为“1”。

增加: 奇怪的事情。在没有改变代码的情况下,只需重新加载页面就可以获得3个不同的输出“1”,“1 2”,“1 2 3”......

2 个答案:

答案 0 :(得分:2)

您可以尝试嵌套这样的查询

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

    f();

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

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

     } );

   } );

答案 1 :(得分:0)

你的例子实际上是按你想要的方式运作的。在Firefox和Chrome中我都在控制台输出中看到:

1
2
3