2013-02-15 5 views
2

Я не сторонний разработчик, и я работаю над случайным проектом, который требует, чтобы AJAX получал кусок JSON.jquery ajax response: разница между Chrome и Firefox

$('#btn1').click(function() { 
    $.ajax({ 
     url: 'http://mywebsite.com/persons/mike', 
     type: "get", 
     success: function(response, textStatus, jqXHR){ 
      var age1 = JSON.parse(response).data.age; // works for Firefox 
      var age2 = response.data.age; // works for Chrome 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      console.log('Error') 
     }, 
     complete: function(){ 
      console.log('Complete') 
     } 
    }); 
}); 

Я использую Firebug в Firefox и средствах разработки в Chrome. response имеет тип Object в Chrome и является String в Firefox.

Есть ли общий способ сделать AJAX в jQuery и успешно проанализировать ответ?

+0

Ваш сервер, вероятно, не устанавливает правильные заголовки ответов, чтобы JQuery понимал, что это JSON в обоих браузерах. – bfavaretto

+0

@bfavaretto серверная сторона использует Джерси, а конечная точка аннотируется '@Produces (MediaType.APPLICATION_JSON)'. – zihaoyu

+0

Странно, Интеллектуальный Угадай должен разобрать его в Firefox. Возможно, проверьте заголовки ответов на вкладке NetBoard Firebug, чтобы увидеть, действительно ли браузер получает этот заголовок. Тем не менее, заставляя реакцию анализировать, поскольку JSON позаботится об этом. –

ответ

7

Комплект dataType: 'json' в вашем $.ajax.

Это заставит ответ внутри обработчика success/done быть уже разобранный объект, иначе, в случае, если ответ не является допустимым JSON, обработчик error/fail будет называться.

Примечание: Использование dataType заставит ответ обрабатываться как JSON, даже если вы не укажете заголовок Content-Type: application/json в ответе.

Если вы укажете заголовок, то, если Интеллектуальный Угадатель jQuery.ajax будет анализировать ответ как объект, даже если вы не указали dataType.

Таким образом, вы можете использовать dataType: 'json' в $.ajax или вывести заголовок Content-Type: application/json с внешнего сервера, и он будет работать нормально. Или и то, и другое, если вы хотите быть повсюду. =]

+0

Это работает. Благодарю. – zihaoyu

+1

Я действительно не мог понять, почему мой шаблон усов не работал. Как только я установил dataType, он сработал. Сэкономил мне кучу времени, спасибо! – marty

Смежные вопросы