Ошибка с комбинацией: jQuery 1.4, ajax / json, Firebug Lite и IE 8 - PullRequest
6 голосов
/ 09 октября 2010

Я только что пришел к выводу, что вызовы jQuery ajax не будут работать с данными JSON в IE 8, что бы я ни пытался. Я обнаружил, что могу использовать библиотеку jQuery 1.3.2, и это решило проблему, но 1.4 просто не будет играть в мяч с запросами JSON ajax. Даже когда возвращаемые данные JSON были настолько просты, что не могло быть и речи о том, что они находятся в неверном формате. Например:

{"x":"a"}

Это было независимо от того, использовал ли я сервлет Java для возврата данных JSON, или простой, стандартный текстовый файл. Независимо от dataType или contentType. Независимо от ПОЛУЧИТЬ против ПОЧТЫ. Независимо от того, использовал ли я $ .ajax или $ .getJSON. И все это работает в Firefox 3.6.

Затем до меня дошло, что я взял ссылку на Firebug Lite, и ЭТО РАБОТАЛО! Внезапно проблема исчезла. Он работал независимо от того, как возился с contentType в ответе (в сервлете, который есть) или с dataType, который я указал в запросе.

Проблема возвращается, если я снова ссылаюсь на Firebug Lite ... даже если мой код никогда не использует его.

Кто-нибудь видел такое поведение, и есть ли у кого-нибудь исправление или обходной путь? Я не хотел бы, чтобы перестали использовать Firebug Lite. Спасибо за понимание. Опять же, проблема возникает только тогда, когда вы объединяете jQuery 1.4, Firebug Lite, данные JSON и IE 8.

Вот вызов ajax сервлету, если он имеет значение:

$.ajax({
 cache: false,
 url:"http://localhost:8080/Performance_Reporting/TestServlet",
 type:"GET",
 contentType: "application/json",
 dataType: "json",
 timeout:30000,
 success: function(d, status, req)
 {
  $("#result").text(d.x);
 },
 error: function(req, status, err)
 {
  $("#result").text(req.responseText);
 }
})

Ответы [ 2 ]

1 голос
/ 22 октября 2010

Я на самом деле видел ту же проблему и с простыми HTML-ответами.

0 голосов
/ 14 марта 2011

В настоящее время я не могу заставить веб-сервис выводить правильный contentType, но я смог использовать $ .ajax () в последней версии jQuery, изменив свой код JavaScript следующим образом ...

$.ajax({
 cache: false,
 url:"http://localhost:8080/Performance_Reporting/TestServlet",
 type:"GET",
 contentType: "application/json",
 dataType: "text",
 timeout:30000,
 success: function(d, status, req)
 {
  $("#result").text($.parseJSON(d).x);
 },
 error: function(req, status, err)
 {
  $("#result").text(req.responseText);
 }
})

Разница в том, что служба ожидает, что ТЕКСТ не JSON, а затем анализирует JSON ....

d = $.parseJSON(d);

Бодж, но исправлено.

...