需要帮助获取 JSON 数据最后一项 [重复]
Posted
技术标签:
【中文标题】需要帮助获取 JSON 数据最后一项 [重复]【英文标题】:Need help getting JSON data last item [duplicate] 【发布时间】:2013-07-03 21:04:56 【问题描述】:我正在尝试访问此 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,这可能是罪魁祸首。如果是这样,我还能如何获取提要数据?
【问题讨论】:
数组['a', 'b']
的长度是多少?数组中的最高索引是多少?
Feed 返回的长度不同
@JodyHeavener Felix 表示数组中没有索引等于数组长度的项
啊,明白了。我使用它的印象是length
返回了项目总数。如何获得总数?
length
确实返回项目总数。 ['a', 'b']
包含两个元素,因此 .length
返回 2
。第一个元素的索引为0
,第二个(也是最后一个)元素的索引为1
。
【参考方案1】:
你应该。
改变
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 响应。
【讨论】:
啊,是的。尽管如此,仍然没有运气! @Jody:URL 好像没有返回 JSONP。如果服务器不支持 JSONP,则不能使用它。您必须通过您的服务器代理请求。 这个api好像不支持jsonp。 如果你设置了一个回调响应,如果它必须支持 jsonp,它应该放在一个包装器中 轰隆隆。有用!现在我想唯一的问题是我的服务器和外部服务器上的大量请求使用。【参考方案2】:如 cmets 中所述,此提要不支持 JSONP。因此,我没有直接从 StreamON 提要中提取数据,而是执行了以下操作来将该提要数据写入我自己的服务器并有效地复制提要:
file_put_contents("playlist.json", fopen("http://cjzn.streamon.fm/metadata/recentevents/CJZN-48k.json", 'r'));
所以现在playlist.json
位于我的服务器上,我可以使用 JSON 从中提取。我只需要定期将外部提要写入我的服务器。
还给评论者一个帽子提示,关于我在检索提要中的最后一项并忘记减去 1 因为索引从 0 而不是 开始的问题>1。谢谢大家!
【讨论】:
以上是关于需要帮助获取 JSON 数据最后一项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章