请看一下这段代码:
$(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”......
答案 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