請看看下面的代碼:
$(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()提醒(),輸出爲真 「1 2 3」。當這種方法被稱爲彼此完全相處後,在Chrome中輸出變爲「1」。
增加: 奇怪的事情。在不改變代碼的情況下,我只需重新加載頁面即可獲得3個不同的輸出「1」,「1 2」,「1 2 3」...
查詢你期待什麼結果呢?你會得到什麼結果?定義「正常工作」 – Quentin 2012-01-29 12:03:05
感謝您的注意,我編輯了這個問題。 – Sergey 2012-01-29 12:05:55
運行該代碼*的結果是* 1 2 3 - http://jsfiddle.net/njxR7/。你似乎已經產生了一個減少了的測試用例,將問題減少到了無。 – Quentin 2012-01-29 12:13:58