1

我正在尝试访问此 JSON 提要以获取提要中的最后一项,即广播电台上正在播放的当前歌曲,因此我可以将其推送到流播放器网络应用程序中:

function getSongData(){
    $.ajax({
        url: 'http://cjzn.streamon.fm/metadata/recentevents/CJZN-48k.json',
        dataType: 'jsonp',
        success: function(data) {
            var totalItems = data.length;
            alert('Current song: ' + data[totalItems].TIT2);
        },
        error: function() {
                alert('Unable to retrieve data');
        }
    });
}

如您所见,我使用data.length它来检索项目总数,这意味着该数字也是提要中的最后一项。我能得到的只是错误信息!我知道我需要使用 JSONP 将数据获取到我的域,但老实说,我不知道是否支持 JSONP,这可能是罪魁祸首。如果是这样,我还能如何获取提要数据?

4

2 回答 2

5

你应该。

改变

data[totalItems].TIT2

data[totalItems-1].TIT2

数组索引从 0 开始。所以你需要为最后一项做 length-1。data[totalItems]将超出范围,并且在您undefined.TIT2有效访问时会出现错误。

这个 api 似乎不支持 JSONP。如果您使用 jquery 触发 ajax,它会在 url 中附加一个回调字符串以进行 jsonp 回调。

例如:http ://cjzn.streamon.fm/metadata/recentevents/CJZN-48k.json?callback=jQuery19105709207213949412_1373047199605&_=1373047199606

但是响应不会被包含在带有回调名称的函数中,理想情况下响应应该是:

jQuery19105709207213949412_1373047199605(jsonData);

但它没有,而是按原样给出 json 响应。

于 2013-07-05T17:43:59.230 回答
1

如评论中所述,此提要不支持 JSONP。因此,我没有直接从 StreamON 提要中提取数据,而是执行以下操作将该提要数据写入我自己的服务器并有效地复制提要:

file_put_contents("playlist.json", fopen("http://cjzn.streamon.fm/metadata/recentevents/CJZN-48k.json", 'r'));

所以现在playlist.json位于我的服务器上,我可以使用 JSON 从中提取。我只需要定期将外部提要写入我的服务器。

对于我在检索提要中的最后一项并忘记减去1因为索引从0而不是1开始时的问题,也给评论者一个帽子提示。多谢你们!

于 2013-07-05T18:25:37.423 回答