JQuery AJAX проблема в Chrome - PullRequest
       52

JQuery AJAX проблема в Chrome

21 голосов
/ 16 ноября 2009

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

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

XMLHttpRequest, переданный в функцию AjaxFailed, имеет код состояния «200», а statusText имеет значение «ok». readystate равен 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);
    }

Ответы [ 8 ]

34 голосов
/ 21 апреля 2011

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

12 голосов
/ 26 января 2012

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

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

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

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

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

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

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

11 голосов
/ 31 мая 2010

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

7 голосов
/ 17 ноября 2009

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

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);
  }
}
1 голос
/ 16 ноября 2009

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

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

0 голосов
/ 16 октября 2018

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

0 голосов
/ 07 декабря 2011

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

0 голосов
/ 16 ноября 2009

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

success: function(response) { branchDetailsSuccess(response); },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...