Подтвердить что ты не робот

Проблема jquery ajax в хроме

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

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

XMLHttpRequest, переданный функции AjaxFailed, имеет код состояния "200", а statusText - "ok". readistate равен 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);
    }
4b9b3361

Ответ 1

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

Невозможно установить аргумент типа данных или даже полностью удалить аргумент типа данных.

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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);
  }
}

Ответ 5

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

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

Ответ 6

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

success: function(response) { branchDetailsSuccess(response); },

Ответ 7

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