Сообщение Ajax прерывается Firefox (не видно в Chrome или IE)
При использовании Firefox, пост-запрос ajax, который у меня есть, сообщается как прерванный в firebug. Пост ajax прекрасно работает в IE и Chrome. Это не междоменный запрос. Я попытался посмотреть на проблему, используя fiddler, и когда fiddler захватывает веб-трафик (с опциями дешифрования https), сообщение работает. Проблема публикации не может быть создана в моей локальной среде разработки, так как все попытки Firefox успешно публикуют данные, которые я отправляю через ajax. Любая идея, почему пост работает, когда Fiddler работает? Это может дать мне некоторое представление о том, как заставить это работать.
$.ajax({
type: 'POST',
url: '/Save',
data: JSON.stringify(dataset),
datatype: "html",
contentType: "application/json",
success: function (data, textStatus, jqXHR) {
//alert("success");
},
error: function (jqXHR, textStatus, errorThrown) {
//alert("error");
}
});
Кроме того, этот ajax-запрос вызывается рядом методов, и только когда отправляется самый большой из наборов данных, он не выполняется.
8 ответов
Попробуй только
async: false
в варианте ajax у меня была такая же проблема.
Я бы начал с явной установки (и изменения) некоторых основных параметров ajax:
cache: false,
timeout: 60000,
async: false
Какой тип контента ваш сервер возвращает. JSON или HTML контент. Используете ли вы charset=utf-8 в содержимом сервера. Убедитесь, что ваш ответ сервера должен быть в формате JSON contentType. Еще одно предположение, удалить тип данных: "HTML" из вашего кода. Попробуйте на удачу.
Если ваш сервер возвращает json означает, попробуйте ниже
$.ajax({
type: 'POST',
url: '/Save',
data: JSON.stringify(dataset),
datatype: "json",
contentType: "application/json",
success: function (data, textStatus, jqXHR) {
//alert("success");
},
error: function (jqXHR, textStatus, errorThrown) {
//alert("error");
}
});
Тип данных: "json", contentType: "application/json" имеет смысл
Если вы отправляете этот AJAX-запрос из обработчика событий (пример: нажатие кнопки отправки), обязательно предотвратите поведение браузера по умолчанию (отправка формы) до тех пор, пока не будет запущено 2 HTTP-запроса, а первый будет прерван.
Ты можешь использовать e.preventDefault()
для достижения этой цели.
У меня просто была эта проблема на IE8.
У меня также были похожие проблемы, и я попробовал некоторые идеи, описанные выше. Я наконец исправил "прерванное" состояние:
- добавление
e.preventDefault();
а такжеreturn false;
к кнопкам обработчиков событий - добавление
datatype: "json", contentType: "application/json",
вjQuery.ajax
метод params.
Спасибо всем за подсказки.
Если вы используете двухстороннюю аутентификацию SSL для запроса CORS, Firefox по умолчанию прервет ваши запросы jQuery ajax. Это связано с различными реализациями CORS в Firefox и Chrome. Вы можете решить эту проблему в своем клиентском коде, добавив withCredentials: true
к вашим экземплярам XHR. В jQuery вы можете добавить это к ajax
вызов:
xhrFields: {
withCredentials: true
}
Проверьте эти сообщения об ошибках для более подробной информации:
- Chrome отправляет клиентские сертификаты TLS в предварительном просмотре CORS, в нарушение требований спецификации
- TLS handshake завершается неудачно в запросах CORS, потому что сертификат не отправляется
Я также заметил, что Firefox по-прежнему категорически отказывается отправлять учетные данные на предварительные запросы OPTIONS, поэтому вам необходимо настроить сервер так, чтобы он не требовался (что мне кажется безумным в сценарии двустороннего SSL).
Это либо междоменная проблема, либо проблема с Firefox, прерывающим ваш запрос, потому что запрос асинхронный. Для междоменного домена вы можете проверить происхождение вашего запроса и то, что разрешено на веб-сервисе. Возможно, вам придется читать на CORS.
Если это не междоменный домен, то это, безусловно, проблема с асинхронным запросом. Просто измените его для синхронизации.