【问题标题】:Jquery JSON .each() doesnt work in Google ChromeJquery JSON .each() 在 Google Chrome 中不起作用
【发布时间】:2010-05-12 16:31:00
【问题描述】:

我在一个网站上有一个非常简单的聊天应用程序,效果很好。

它通过 ajax 请求如下:

$.ajax({
 url: "fetch/"+CHAT_SESSION_ID+"/"+LAST_MESSAGE_ID,
 dataType: "json",
 cache: false,
 success: function(data) {
  if (data.session_active == 0) { //If other chatter ended session
            alert("Session Ended");
  }
  else
  {
            $.each(data.messages, function(i,msg){
                alert(msg.message.Body);
            )};
        }
     }
});

并获得如下所示的 json 响应:

{ "session_active": "1", "messages": [ {"message": {"MsgID": "100", "UserID": "1", "Body": "heyy"}}, ]}

它至少在 FF 和 Saf 中运行良好,但在 Chrome 中它永远不会超过 .each!

这让我发疯了,我已经尝试了几天在网上遇到的所有问题,但我似乎无法正确。

请人帮忙!如果有人想自己触发它,我可以提供测试服务器;)

【问题讨论】:

  • 您是否尝试在 Firebug(firefox 扩展)中调试它?即使它确实在 Firefox 中运行,它实际上也可能会显示一些警告或错误。
  • 还可以通过转到 Chrome 屏幕右上角的菜单并转到“开发人员 -> 开发人员工具”来尝试开发人员工具。屏幕左下方的“显示控制台”按钮或其中一个选项卡(例如“资源”)可能有助于确保正确识别 JSON 数据的 mimetype/编码等。

标签: javascript jquery ajax json google-chrome


【解决方案1】:

也许消息数组中的尾随逗号会导致问题。请参阅对以下问题的回复:

Can you use a trailing comma in a JSON object?

【讨论】:

  • 是的,似乎是格式错误的 json
  • +1,不确定这是否是实际问题,但它会在 IE 中爆炸
  • 太棒了!一定是那个尾随逗号,因为它似乎在所有其他浏览器中都可以使用,所以没有费心将其删除。
【解决方案2】:

可能不正确的 mimetype:如果您查看 jQuery 的解析代码,似乎如果 JSON 数据不是传递给$.parseJSON(data) 的字符串,那么它会返回null。这可能是一个问题,好像 Chrome 错误地识别了 AJAX 响应的 mimetype 并且它不会将 AJAX 响应解释为文本,它将返回 null 并因此将 null 传递给 AJAX 函数。因此,与 AJAX 响应一起提供的 mimetype(或可能缺少)也可能是问题所在:

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
        .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

        // Try to use the native JSON parser first
        return window.JSON && window.JSON.parse ?
            window.JSON.parse( data ) :
            (new Function("return " + data))();

    } else {
        jQuery.error( "Invalid JSON: " + data );
    }
},

格式错误的 JSON: 这可能适用于 Firefox 和其他浏览器但不适用于 Google Chrome 的另一个原因是 jQuery 解析函数尝试使用原生 window.JSON.parse(data) 函数而不是 new Function("return " + data) 如果原生 JSON在该浏览器中可以进行解析。

Google Chrome 的解析可能比 Firefox 更严格,因为标准在 http://www.json.org/ 中指定了尾随逗号之类的东西,如 Danilo Celic 的回答中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2011-09-01
    • 2013-11-26
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多