需要帮助获取JSON数据的最后一项

时间:2013-07-05 17:42:55

标签: jquery jsonp

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

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来检索项目总数,这意味着该数字也是Feed中的最后一项。我能得到的只是错误信息!我知道我需要使用JSONP将数据传输到我的域,但老实说我不知道​​JSONP是否受支持这可能是罪魁祸首。如果是这样,我怎样才能获得Feed数据?

2 个答案:

答案 0 :(得分:5)

你应该。

变化

data[totalItems].TIT2

data[totalItems-1].TIT2

数组索引从0开始。因此您需要为最后一项执行length-1。 data[totalItems]将超出范围,当您有效访问undefined.TIT2时,您将收到错误。

这个api似乎不支持JSONP。如果用jquery触发ajax,它会将一个回调字符串附加到jsonp回调的url。

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

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

jQuery19105709207213949412_1373047199605(jsonData);

但它没有,相反它只是按原样给出json响应。

答案 1 :(得分:1)

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

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

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

还向评论者提供了关于我在检索Feed中的最后一项并且忘记减去 1 的问题的提示,因为索引从 0 开始而不是 1 即可。谢谢你们!