jquery проблема с ajax в хроме

У меня есть следующий код jquery, работающий на моей странице в FF и IE, но хром, похоже, сходит с ума.

в FF и IE выполняется вызов, и результат добавляется к div. в chrome он вызывает ajaxfailed при сбое.

XMLHttpRequest, переданный функции AjaxFailed, имеет код состояния «200», а statusText — «ok». состояние готовности равно 4, а responseText установлен на данные, которые я хочу добавить в div.. в основном из того, что я вижу, что он вызывает метод сбоя, но он не терпит неудачу.. я пробовал как с запросами на получение, так и с отправкой, и он всегда ломается в хроме.

function getBranchDetails(contactID, branchID) {
  $.ajax({
    type: "GET",
    url: urlToRequestTo,
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: branchDetailsSuccess,
    error: AjaxFailed
  });
}



 function branchDetailsSuccess(result) {
      $("#divBranchControl").empty();
      $("#divBranchControl").append(" " + result);
      $("#branchDiv").tabs();
    }



 function AjaxFailed(result) {
      alert("FAILED : " + result.status + ' ' + result.statusText);
    }

person spaceman    schedule 16.11.2009    source источник


Ответы (8)


В операции AJAX просто добавьте: async: false после datatype: "json", и это должно решить вашу проблему. В Chrome есть проблема с обработкой асинхронных вызовов.

person MSS    schedule 21.04.2011
comment
Спасибо, это решило мою проблему. Хотя странно, я видел проблему только в одном конкретном месте. Для меня это не было постоянной проблемой. - person enobrev; 28.11.2011
comment
Меня устраивает. Вы здорово помогли. Это спасло меня от большого количества потерянного времени. - person radu florescu; 20.07.2012
comment
плагин jquery использовал jsonp в качестве типа данных. Я изменил на «json», и он работает. Chrome явно не любит jsonp. - person Peanut; 27.08.2012
comment
В чем проблема с обработкой асинхронных вызовов? - person JoshBerke; 30.08.2012
comment
Укусите еще раз, это странно, потому что иногда это работает нормально, но определенные страницы или определенные вызовы просто терпят неудачу. Хотелось бы узнать проблему - person JoshBerke; 28.12.2013

Я только что увидел, что этот вопрос получил много просмотров, и он все еще открыт. Я совершенно забыл об этом, и, надеюсь, это позволит мне закрыть его.

Установка аргумента типа данных на нуль или даже полное удаление аргумента типа данных решит проблему.

В моем примере я возвращаю обработанное представление (фрагмент html в строке), и в этом коде я указываю тип данных для json, хотя на самом деле это не так. Большинство других браузеров, похоже, игнорируют тип данных, если он неверен, и продолжают жить, позволяя мне добавить результат html.

Хром выдает ошибку. Текст состояния в порядке, код состояния — 200, потому что фактический запрос ajax прошел нормально. Проблема не имеет ничего общего с самим запросом, проблема в том, что возвращаемые данные не такие, как я сказал хрому.

Так ломается хром. Если я полностью удаляю аргумент типа данных, хром выясняет, что это за данные, когда он их получает. Если я установлю аргумент типа данных на «html», он также будет работать нормально.

Короче говоря, проблема не в хроме. Это я. Потому что я такой тупой. Я отмечаю это как ответ на этот вопрос, поскольку он отвечает на пример, который я представил в исходном вопросе.

В комментариях другие описали другие ситуации, когда это решение, скорее всего, не поможет.

person spaceman    schedule 26.01.2012
comment
Это сработало, но мне пришлось удалить как тип данных, так и аргументы данных. - person ninjasense; 30.08.2012
comment
Вместо того, чтобы публиковать новый ответ, я думаю, что просто прокомментирую этот. Надеюсь, это нормально? У меня была проблема с хромом для мобильных устройств, для меня это закончилось тем, что у меня была функция что-то (страница = 0) {}, когда это должно было быть что-то (страница) {}, глупая ошибка, но ее изменение позаботилось об этом. Проклятый php! Он нормально загружался во всех других браузерах, прежде чем проблема возникла только с хромом. - person Kyle Coots; 16.09.2015

Я не знаю, есть ли у вас все еще эта проблема, но я столкнулся с похожей ошибкой только сегодня. Я вызывал страницу aspx, чтобы вернуть строку с responseText, и Chrome ничего не возвращал. Оказалось, что у меня был Response.Close на моей странице aspx, который работал везде, но, вероятно, не отправлял некоторые необходимые заголовки или что-то в Chrome и/или Safari. Надеюсь, это поможет кому-то.

person Krokador    schedule 31.05.2010
comment
Это сработало и для меня. Чтобы быть конкретным, я решил закомментировать //response.Close(); после вызова response.Flush() и перед вызовом response.End() - person PandaWood; 01.03.2011
comment
Замена Response.Close() на Response.End() исправила это! Большое спасибо! - person Drakarah; 10.04.2012

через полтора дня я справился с этим, так что могу я представить.....

function getBranchDetails(contactID, branchID) {

  $.ajax({
    type: "GET",
    url: urlToRequestTo,
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: branchDetailsSuccess,
    error: branchAjaxFailed
  });
}

function branchDetailsSuccess(result) {
  $("#divBranchControl").empty();
  $("#divBranchControl").append(" " + result);
  $("#branchDiv").tabs();
}

function branchAjaxFailed(result) {
  if (result.status == 200 && result.statusText == "OK") {
    //this is here only because chrome breaks on this method only for no reason whatsoever.
    //chrome sees the request as failed, but everything happens fine...
    branchDetailsSuccess(result.responseText);
  }
  else {
    alert("FAILED : " + result.status + ' ' + result.statusText);
  }
}
person spaceman    schedule 17.11.2009
comment
у меня та же проблема, что и у вас, и это решение кажется мне глупым. Пожалуйста, сообщите нам, если вы найдете дополнительную информацию по этому поводу. спасибо, что поделились этим обходным путем в любом случае. - person Moe Salih; 07.01.2010
comment
Я столкнулся с этим сегодня, установив часть данных, чтобы добиться цели. Спасибо! - person jonnii; 07.03.2010
comment
У меня также была эта проблема - данные: был ключ. - person RJ Owen; 21.04.2010
comment
работает только в том случае, если добавлено предупреждение в error.status 200, но в обычном режиме у меня есть цикл для 5 вызовов ajax «async: false», хром становится занятым и показывает диалоговое окно страницы убийства/ожидания, но не обновляет строку состояния $('#status' ).html('вызов:' + счетчик); в функции ошибки с условием result.status == 200. - person Riz; 30.12.2010
comment
Была эта проблема с разбором файла xml. Добавление данных: к звонку разрешил это для меня. Спасибо! - person aaandre; 31.05.2011

Попробуйте установить для параметра данных значение "".

Для запросов GET к URL-адресу добавляется параметр данных. Не уверен, почему у Chrome могут возникнуть проблемы с этим, но попробовать стоит :)

person Lobstrosity    schedule 16.11.2009
comment
спасибо за идею, но еще раз хром дает мне палец ... я сделал один из двух других методов со вчерашнего дня, и они отлично работают, используя макет выше ... поэтому я пытаюсь выяснить, что именно идет не так в этом случае . - person spaceman; 17.11.2009

Я только что столкнулся с этим в Chrome (в Firefox все было в порядке), и добавление async: true к параметрам ajax решило эту проблему.

person Sam Malayek    schedule 15.10.2018
comment
Похоже, что async: true является настройкой по умолчанию? api.jquery.com/jquery.ajax. Возможно, вы изменили что-то еще? - person Crashalot; 31.07.2019

Попробуйте это для успеха:

success: function(response) { branchDetailsSuccess(response); },
person Jimmeh    schedule 16.11.2009

Используйте метод POST в сервлете и измените type:POST в $.ajax.

person NAC    schedule 07.12.2011