我已经动态创建了以下javascript对象(来自PHP):
var t_feed = '';
t_feed += '[';
t_feed += '{name: "Tom Thumb", thumbnail: "images/Tom_Thumb.jpg", link: "http://twitter.com/cnnbrk/statuses/121630545879900161", description: "This is the body of the tweat"},';
t_feed += '{name: "Tom Thumb", thumbnail: "images/Tom_Thumb.jpg", link: "http://twitter.com/cnnbrk/statuses/121622456363524097", description: "This is the body of the tweat"},';
t_feed += '{name: "Tom Thumb", thumbnail: "images/Tom_Thumb.jpg", link: "http://twitter.com/cnnbrk/statuses/121614678341320706", description: "This is the body of the tweat"}';
t_feed += ']';
twitterFeeds[0] = eval(t_feed);
这在IE8 +中运行良好,但我在IE7中收到以下错误:
SCRIPT5007:无法获取属性“缩略图”的值:对象是 null或undefined。
当我尝试访问缩略图属性时,我得到了这个:
$.each(twitterFeeds[id], function(i,item){
alert(item.thumbnail);
});
为什么在IE7中失败并且有一种不同的方式来定义一个可行的列表或对象?
答案 0 :(得分:2)
你需要先声明数组
var twitterFeeds = []; // declaration
twitterFeeds[0] = eval(t_feed);
alert(twitterFeeds);
答案 1 :(得分:2)
As a general rule, if you’re using eval() there’s probably something wrong with your design.
您可能希望尝试将此字符串解析为JSON而不是使用eval(),然后从那里开始工作。
答案 2 :(得分:1)
您无需使用eval
。直接使用代码:
var t_feed = [
{name: "Tom Thumb", thumbnail: "images/Tom_Thumb.jpg", link: "http://twitter.com/cnnbrk/statuses/121630545879900161", description: "This is the body of the tweat"},
{name: "Tom Thumb", thumbnail: "images/Tom_Thumb.jpg", link: "http://twitter.com/cnnbrk/statuses/121622456363524097", description: "This is the body of the tweat"},
{name: "Tom Thumb", thumbnail: "images/Tom_Thumb.jpg", link: "http://twitter.com/cnnbrk/statuses/121614678341320706", description: "This is the body of the tweat"}
];
twitterFeeds[0] = t_feed;
更新:正如@Quentin指出的那样,使用PHP会更加清晰(假设创建了一个有效的类)并使用数组中的实例初始化一个新数组,然后使用json_encode
它。这样您就不必担心语法和安全转义字符。
更新2:如果您没有首先初始化twitterFeeds,它也将失败。你做到了吗?如果没有,请更改为var twitterFeeds = [ t_feed ]
;