Проблема 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);
}
Ответы
Ответ 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
.