2010-05-12 75 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/

相關問題