2014-07-03 127 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()分开来处理响应。