0

我正在使用 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 都很好。

任何朝着正确方向的推动将不胜感激,我完全被难住了!

干杯,肖恩

4

3 回答 3

9

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

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

与其他浏览器相比,IE 对这个错误的容忍度更低。

于 2009-11-19T14:53:59.530 回答
0

Internet Explorer 因断尾逗号而臭名昭著

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

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

于 2009-11-19T15:00:28.160 回答
0

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

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

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

于 2009-11-19T18:20:05.150 回答