2012-01-29 53 views
2

請看看下面的代碼:

$(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」...

+2

查詢你期待什麼結果呢?你會得到什麼結果?定義「正常工作」 – Quentin 2012-01-29 12:03:05

+0

感謝您的注意,我編輯了這個問題。 – Sergey 2012-01-29 12:05:55

+4

運行該代碼*的結果是* 1 2 3 - http://jsfiddle.net/njxR7/。你似乎已經產生了一個減少了的測試用例,將問題減少到了無。 – Quentin 2012-01-29 12:13:58

回答

2

您可以嘗試窩這樣

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

    f(); 

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

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

    }); 

    }); 
0

您的示例實際上是按照您的意圖運行。在Firefox和Chrome的我看到在我的控制檯輸出:

1 
2 
3