2010-05-12 66 views
0

我在网站上有一个非常简单的聊天应用程序,效果很好。Jquery JSON .each()在Google Chrome中不起作用

它要求阿贾克斯这样的:

$.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); 
      )}; 
     } 
    } 
}); 

并获取lookes这样的JSON响应:

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

它的作品真的很好至少在FF和SAF,但在Chrome它从来没有越过.each!

这让我疯狂,尝试了一些我在网上遇到的日子,但我似乎无法做到正确。

请别人帮忙!如果有人想自己萤火虫,我可以提供测试服务器;)

+1

你试过在Firebug(firefox extension)中调试它吗?它可能实际上显示一些警告或错误,即使它在Firefox中运行。 – 2010-05-12 16:33:42

+0

也可以尝试使用开发人员工具,方法是转到Chrome屏幕右上角的菜单,然后选择“开发人员 - >开发人员工具”。屏幕左下方的“show console”按钮或其中一个选项卡(如“资源”)可能有助于确保JSON数据的mimetype /编码被正确识别等。 – cryo 2010-05-12 17:08:06

回答

4

也许消息阵列中的尾随逗号引起问题。见答复下列问题:

Can you use a trailing comma in a JSON object?

+0

ya,似乎格式不正确json – Jason 2010-05-12 17:31:07

+0

+ 1,不知道这是否是实际的问题,但它会在IE – jvenema 2010-05-12 17:44:42

+0

炸毁真棒!肯定是那个尾随的逗号,并没有打算删除它,因为它似乎适用于所有其他浏览器。 – gust1n 2010-05-13 07:44:16

0

可能不正确的MIME类型:如果你看一下jQuery的解析代码,看来,如果JSON数据是不会传递到$.parseJSON(data)字符串则返回null 。这可能是一个问题,就好像AJAX响应的mimetype被Chrome错误识别,并且它不会将AJAX响应解释为文本,它将返回null,因此会将null传递给AJAX函数。 mime类型与Ajax响应服务(或可能没有一个)可以因此也成为问题:

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和其他浏览器,但不是谷歌Chrome是如果在该浏览器中可用本机JSON解析,那么jQuery解析函数会尝试使用window.JSON.parse(data)函数而不是new Function("return " + data)

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

相关问题