2010-01-21 64 views
1

以下JavaScript显示在Safari中,但不显示Mobile Safari。任何人都可以看到任何错误?Javascript:用于循环的JSON'

$("#results").append(data); 

var songdata = JSON.parse(data); 

var i = 0; 

for (i=0;i<=songdata.total;i++) 
{ 
    alert(i); 
    var songhtml = "<ul><li><img src=\"" + songdata.data[i].artwork + "\" /></li><li>" + songdata.data[i].title + "</li><li>" + songdata.data[i].artist + "</li><li>" + songdata.data[i].length + "</li><li>" + songdata.data[i].listen + "</li></ul>"; 
    $("#results").append(songhtml); 

} 

在此先感谢。

+0

为什么在解析之前追加'data'? – 2010-01-21 18:24:04

+1

什么不工作?它没有被执行吗? img标签中的src属性是否为空?它是否在for循环中的第一次传递后失败?请更具体一点。 – 2010-01-21 18:25:58

+0

尝试包括json2.js – MindStalker 2010-01-21 20:42:31

回答

3

JSON.parse不是官方的Javascript,它不支持所有的浏览器。这可能是你的问题,但我没有移动Safari浏览器进行测试。

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

下载这个文件,并

<script type="text/javascript" charset="utf-8" src="/js/JSON2.js"></script> 
+0

是的,我做了一些测试,情况就是这样。这个函数有什么替代方法? – Ben 2010-01-21 20:27:48

+0

非常感谢。工作一种享受! – Ben 2010-01-21 21:39:34

0

for (i=0;i<=songdata.total;i++)看起来对我很可疑。你从零开始,但继续等于或大于total,所以你要循环total+ 1次。 (我把它这是不是一个JavaScript/JSON数组,你使用total而非length。)

如果total告诉你有多少项有,如果在项目开始0,然后用刚<。如果条目从1开始,请执行此操作。 :-)但是,如果您引用无效的songdata[i],那么songdata[i].artwork将失败,因为songdata[i]将是未定义的。

1

我不得不第二MindStalkers评论。 Id打赌它使用非跨浏览器JSON.parse。除此之外,你的循环结构看起来很可疑 - 再加上它对我为什么使用标准循环而不是jQuery.each()没什么意义。