IE6中的嵌套JSON会导致问题

时间:2009-11-19 14:51:50

标签: javascript jquery json getjson

我正在使用jQuery的$.getJSON方法向JSON页面发出请求,并且从返回的JSON中我创建了一些HTML并将其放到页面上。

当我有一个嵌套的JSON对象时出现问题,我稍后会给你看一个例子。

首先,如果我向我的JSON页面发出请求并返回以下JSON,该函数工作正常,我看到页面上出现了一个漂亮的HTML元素:

JSON:

({
     "variants": [
         {
             "variantId": "536",
             "title": "Party Like a Rock Star for Two at the Metropolitan hotel, London ",
             "price": "£299.00"         
         }
     ]
})

这很好,没有错误。

但是,只要我返回下面的JSON,该功能就不起作用。

({
     "variants": [
         {
             "variantId": "536",
             "title": "Party Like a Rock Star for Two at the Metropolitan hotel, London ",
             "price": "£299.00",
             "blogs": [
                 {
                     "title": "Another test",
                     "author": "Sean",
                 },
                 {
                     "title": "This is a test",
                     "author": "Sean",
                 }
             ]
         }
     ]
})

正如你所看到的,它中没有会导致它太破碎的字符。我也试过重命名这些字段,只是偶然的“博客”,“标题”或“作者”是JS中的保留字(正如我想的那样,没有区别!)

为了确保它不是我处理导致问题的数据的方式,我发出警报('得到这里'。);作为我的$ .getJSON函数中的第一段代码(见下文),并且不会触发,所以我知道这不是我正在处理导致错误的数据。

$.getJSON('/ajax/cover_flow_detail.ashx?experienceId=' + arguments[0], function(d) {
        alert('Got here'); // doesn't fire ?

        // omitted for brevity.

}

甚至更奇怪 - 这只发生在IE6中。 IE7& FF很好。

任何正确方向的推动都会受到赞赏,我完全被难过了!

干杯,肖恩

3 个答案:

答案 0 :(得分:9)

您的JSON中有一个错误 - 某些对象定义中的尾随逗号。

(这表明你使用模板而不是JSON库生成JSON,这是一个错误。)

IE比其他浏览器更不容忍该错误。

答案 1 :(得分:0)

Internet Explorer is notorious for breaking on trailing commas

var obj = {
     upper: 1,
     stage: 2,
};

在IE上失败,而其他浏览器在第二个元素之后忽略尾随逗号。

答案 2 :(得分:0)

具有讽刺意味的是,它应该是错误的。 IE做得对。如果语法不正确,浏览器不应松散地解析JSON。 ,应该像对待一样;然后

我相信它是解析器,因为在EXT JS中,它是严格的。

请记住,IE不会忽略关闭不当的HTML标记,而不会忽略Netscape。有意思的转身。