Jquery JSON .each () не работает в Google Chrome - PullRequest
0 голосов
/ 12 мая 2010

У меня на сайте очень простое приложение чата, которое работает довольно хорошо.

Он запрашивает 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!

Это сводит меня с ума, перепробовал все, с чем я сталкивался в Интернете в течение нескольких дней, но, похоже, я не могу понять это правильно.

Пожалуйста, помогите кому-нибудь! Я могу предоставить testserver, если кто-то захочет сам поджечь;)

Ответы [ 2 ]

4 голосов
/ 12 мая 2010

Возможно, запятая в вашем массиве сообщений вызывает проблему. Смотрите ответы на следующий вопрос:

Можно ли использовать запятую в объекте JSON?

0 голосов
/ 12 мая 2010

Возможно, неверный mimetype : Если вы посмотрите на код синтаксического анализа jQuery, кажется, что если данные JSON не являются строкой, переданной в $.parseJSON(data), то она возвращает null. Это может быть проблемой, так как если Mime-тип ответа AJAX неправильно определен Chrome, и он не интерпретирует ответ AJAX как текст, он вернет null и, следовательно, передаст null функции AJAX. Mimetype, обслуживаемый ответом 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 и других браузерах, но не в Google Chrome, заключается в том, что функция синтаксического анализа jQuery пытается использовать встроенную функцию window.JSON.parse(data) вместо new Function("return " + data), если анализируется собственный JSON доступно в этом браузере.

Синтаксический анализ Google Chrome может быть более строгим, чем у Firefox при наличии таких вещей, как конечные запятые, как указано в стандарте в http://www.json.org/, как указано в ответе Данило Селика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...