【问题标题】:Nested JSON in IE6 causes problemsIE6 中的嵌套 JSON 会导致问题
【发布时间】:2009-11-19 14:51:49
【问题描述】:

我正在使用 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 中的保留字(我想,没有区别!)

为了确保不是我处理导致问题的数据的方式,我设置了一个警报('Got here.');作为我的 $.getJSON 函数中的第一段代码(见下文),它不会触发,所以我知道这不是我对导致错误的数据所做的事情。

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

        // omitted for brevity.

}

更奇怪的是——这只发生在 IE6 中。 IE7 & FF 都可以。

我们将不胜感激,我完全被难住了!

干杯,肖恩

【问题讨论】:

    标签: javascript jquery json getjson


    【解决方案1】:

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

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

    IE 对这个错误的容忍度低于其他浏览器。

    【讨论】:

    • 非常感谢大卫 - 在编程方面,一双新鲜的眼睛可以做的事情真是太神奇了!
    【解决方案2】:

    Internet Explorer is notorious for breaking on trailing commas

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

    在 IE 上失败,而其他浏览器会忽略第二个元素后面的逗号。

    【讨论】:

      【解决方案3】:

      具有讽刺意味的是,它应该是错误的。 IE 做对了。如果语法不正确,浏览器不应该松散地解析 JSON。 , 应该被当作 ;那么。

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

      请记住,IE 会忽略关闭不佳的 HTML 标记,而不是 Netscape。有趣的转身。

      【讨论】:

        猜你喜欢
        • 2021-01-05
        • 2012-05-04
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        相关资源
        最近更新 更多