2012-09-30 115 views
-2

可能重複:
jQuery AJAX: return value on success的Javascript/jQuery函數返回值爲空

我試圖從YouTube的數據API加載歌曲列表,並獲得了成功,直到我把它弄壞了出來進入它自己的功能。

問題是,當我將局部變量的值返回到調用函數時會蒸發。基本上,當我嘗試使用它時,它是一個空數組,當它有值時。有人知道可能會發生什麼嗎?

function LoadSongList(feed){ 
    songList = new Array(); 
    $.getJSON(feed, function(data){ 

     if (data['feed']) { 
      $.each(data['feed']['entry'], function(i, entry){ 
       songList.push({ 
        videoID: entry.media$group.yt$videoid.$t, 
        title: entry.title.$t, 
        tumbnailUrl: entry.media$group.media$thumbnail[0].url, 
        author: entry.author[0].name.$t 
       }); 

      }); 
     } 

    }); 
    return songList; 
} 
+4

提示:領先的** A **在AJAX – Alexander

+0

我可以有另一種暗示?我不確定「AJAX中的A」是什麼意思?通常,我只想構建標題,視頻ID和作者姓名的結構數組,並將其返回給調用函數。 – user1709730

+1

「Ajax」中的「a」代表「異步」。 '$ .getJSON()'函數在收到Ajax結果之前立即返回,然後你的'return songList'執行完全正確地返回一個空數組,因爲它在這一點上仍然是空的。然後,在當前的JS完成之後,異步但絕對地,你提供給'$ .getJSON()'的回調將被執行並運行你的'$ .each()'循環。 – nnnnnn

回答

4

您應該提供回調方法。 $.getJSON是異步方法,您正試圖在調用成功方法之前返回songList

function LoadSongList(feed, callback){ 
    songList = new Array(); 
    $.getJSON(feed, function(data){ 

     if (data['feed']) { 
      $.each(data['feed']['entry'], function(i, entry){ 
       songList.push({ 
        videoID: entry.media$group.yt$videoid.$t, 
        title: entry.title.$t, 
        tumbnailUrl: entry.media$group.media$thumbnail[0].url, 
        author: entry.author[0].name.$t 
       }); 

      }); 
      callback(songList); 
     } 
    }); 
} 

電話爲:

LoadSongList(feed, function(songList){ 
    // your code 

}); 
+0

我已經做了很少的JavaScript編程,並開始研究jQuery編程。我不確定我瞭解什麼是「回調」。你可以指導我去正確的地方瞭解一個「回調」嗎?謝謝! – user1709730

+0

將你的代碼(在LoadSongList返回之後)移動到一個函數中,然後發送這個函數引用作爲LoadSongList中的第二個參數。 /stackoverflow.com/questions/483073/getting-a-better-understanding-of-callback-functions-in-javascript和http://www.impressivewebs.com/callback-functions-javascript/ – Anoop

+0

你傳入的第二個參數$ .getJSON是回調的例子。 – Anoop