Сообщение 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.

Проверьте максимальный размер сообщения на вашем сервере.

У меня также были похожие проблемы, и я попробовал некоторые идеи, описанные выше. Я наконец исправил "прерванное" состояние:

  1. добавление e.preventDefault(); а также return false; к кнопкам обработчиков событий
  2. добавление datatype: "json", contentType: "application/json", в jQuery.ajax метод params.

Спасибо всем за подсказки.

Если вы используете двухстороннюю аутентификацию SSL для запроса CORS, Firefox по умолчанию прервет ваши запросы jQuery ajax. Это связано с различными реализациями CORS в Firefox и Chrome. Вы можете решить эту проблему в своем клиентском коде, добавив withCredentials: true к вашим экземплярам XHR. В jQuery вы можете добавить это к ajax вызов:

xhrFields: {
  withCredentials: true
}

Проверьте эти сообщения об ошибках для более подробной информации:

Я также заметил, что Firefox по-прежнему категорически отказывается отправлять учетные данные на предварительные запросы OPTIONS, поэтому вам необходимо настроить сервер так, чтобы он не требовался (что мне кажется безумным в сценарии двустороннего SSL).

Это либо междоменная проблема, либо проблема с Firefox, прерывающим ваш запрос, потому что запрос асинхронный. Для междоменного домена вы можете проверить происхождение вашего запроса и то, что разрешено на веб-сервисе. Возможно, вам придется читать на CORS.

Если это не междоменный домен, то это, безусловно, проблема с асинхронным запросом. Просто измените его для синхронизации.

Другие вопросы по тегам