2014-07-03 128 views
-1

我已經閱讀了關於這個特定問題的20個問題,但無法讓他們工作。jquery ajax函數返回數據

我正在創建一個簡單的jquery函數來查詢iTunes API來獲取歌曲數據。

我似乎無法獲得超出ajax函數的數據。我試着回調和異步假,但似乎沒有工作。

這裏是我的代碼:

function itunesData(artist,song) { 
    /* https://itunes.apple.com/search?term=jack+johnson+I+Got+You&entity=song */ 

     $.ajax({ 
      type: 'GET', 
      url: 'https://itunes.apple.com/search', 
      data: { term: artist+' '+song, entity: 'song' }, 
      dataType: 'jsonp', 
      cache: true, 
      statusCode: { 
       404: function() { 
        alert('are you online?') 
       }, 
      }, 
      success: function(resp) { 
        if (resp.resultCount == 0) { 
         return false; 
        } 
        if (resp.results[0]) { 
         songDetails = resp.results[0]; 

         songArt = songDetails.artworkUrl30; 
         songPreview = songDetails.previewUrl; 
         songUrl = songDetails.trackViewUrl; 

         return itunesData = new Array(songArt, songPreview, songUrl); 

        } 

      }, 
     }); 
} 

最後我只需要:

var songData = itunesData('Jack Johnson', 'I Got You'); 

你能告訴我什麼我做錯了嗎?

10x

+0

簡短回答:您不會從回調中返回*(在本例中爲'success'處理程序),返回不會在任何地方執行。您*修改回調中的狀態*。因此,不要將數據返回,而要將數據設置到需要的地方。 (一個共享範圍變量,頁面元素等) – David

+0

該死的,我想念php ... –

+1

AJAX和PHP一樣工作。雖然我不知道PHP是否具有服務器端異步功能的機制,但結構仍然非常相似。異步回調與主線程不在同一個調用堆棧上,所以沒有任何等待返回值。 – David

回答

1

您所做的AJAX調用是異步的;因此您需要實現一個回調函數,並將其與itunesData()分開來處理響應。