2013-03-13 91 views
0

我是JS/JQuery的noob。下面的代碼:用JSONP填充JSON對象的數組Ajax響應

ids = ["1", "2", "3"] 
var imageData = []; 
for (i=0; i<ids.length; i++) { 
    $.ajax({ 
     url: 'http://my.images.edu/' + ids[i] + '/info.json', 
     type: 'GET', 
     dataType: 'jsonp', 
     success: function(data) { 
      imageData.push(data); 
     } 
    }); 
}; 
// now I want to do stuff with in a loop with the populated 
// array, but it's always empty! 
console.log(imageData.length); 

的JSONP工作(我可以登錄success功能的JSON對象響應到控制檯)。我的猜測based on this question是,當我想使用它時,數組還沒有填充,但我可能是錯的。如果是這樣的話,我該如何解決它,否則,我錯過了什麼?提前致謝!

回答

0

在當前函數上下文完成其執行之前,imageData將不會被編輯。

代碼將運行至完成,然後成功回調將逐個運行。你必須有你的邏輯來處理回調中的數據。

因爲這看起來像你真的想所有的回調來完成你的操作之前,你可能想看看jQuery的deffereds

沿東西在these lines循環工作。

$('#button').click(function() { 
    $.when(
     $.ajax({ 
      url: '/echo/html/', 
      success: function(data) { 
       alert('request complete') 
      } 
     }), 
     $.ajax({ 
      url: '/echo/html/', 
      success: function(data) { 
       alert('request complete') 
      } 
     }) 
    ).then(function(){ 
     alert('all complete'); 
    }); 
}); 
+0

嗯......這讓我更接近,所以謝謝你。我認爲我仍然有兩個問題:1.任意ajax調用的數量(基於id的數量),所以不知何故我想在'.when(...)'方法中有一個循環,和2.在成功回調函數中,我需要更新一個全局數組......所以'.then()'(或者完全在塊之外)我可以對數組做些什麼。 – JStroop 2013-03-13 02:37:13