Реагируйте на код состояния 303 в jquery (предотвратить перенаправление)

Когда я отправляю запросы на определенный сервер, приходит ответ 303, за которым следует запрошенный ответ в сочетании с кодом состояния 200. Забавно, что я вижу это только в сетевом представлении консоли разработчика. При проверке кода состояния и ответа на мой запрос $.ajax(), будет ответ второго запроса, а также код состояния 200 http.

Проблема в том, что кажется, что второй запрос кэшируется (хотя 200 кодов состояния), и мне действительно нужно, чтобы он не кэшировался. Поэтому я действительно хотел бы вмешаться в процесс пересылки, который происходит с кодом состояния http 303. Я хотел бы, чтобы моя функция jquery проверила код состояния, а затем отправила запрос get с явными заголовками, которые говорят серверу не кэшировать ответ.

Ну, я просто не знаю, как это сделать, так как (как упоминалось выше) метод jQuery.ajax будет отвечать ответом и кодом состояния перенаправленного запроса (200).

Вы можете мне помочь?

редактировать

10.3.4 303 См. Другое

Ответ на запрос может быть найден под другим URI и ДОЛЖЕН быть получен с использованием метода GET для этого ресурса. Этот метод существует главным образом для того, чтобы позволить выводу сценария, активированного POST, перенаправить пользовательский агент на выбранный ресурс. Новый URI не является заменой ссылки на первоначально запрошенный ресурс. Ответ 303 НЕ ДОЛЖЕН кэшироваться, но ответ на второй (перенаправленный) запрос может быть кэширован.

может быть, мне нужно как-то помешать пользовательскому агенту перенаправить себя, чтобы я мог сделать перенаправление?

Или есть способ просто указать серверу / браузеру не кэшировать второй запрос со стороны клиента? или чтобы он не перенаправил мой запрос? или хотя бы изменить второй запрос перед перенаправлением?

4 ответа

Решение

Ответы в диапазоне 300 должны быть прозрачными. AFAIK, веб-браузеры не открывают ни одного из них для JavaScript. Таким образом, обработка 303 не вариант.

Вы пытались установить cache свойство в false в ajaxSetup? Он добавит метку времени к запросу, предотвращая кеширование ответа браузером. Вы также можете сделать это вручную самостоятельно. Браузер должен сопоставить первый URL-адрес запроса со вторым ответом

Вы не можете остановить браузер от перенаправления 303. Похоже, это не то, что вы хотите, в любом случае. Что бы вы ни делали в браузере, чтобы предотвратить кэширование исходного запроса, оно должно работать одинаково хорошо, чтобы предотвратить кэширование перенаправленного 200. Тем не менее, вы мало что можете сделать на стороне браузера, кроме использования уникального URL для каждого запроса. Это делается для вас автоматически с помощью jQuery, когда вы устанавливаете cache: false,

$.ajax({
  url: "example.html",
  cache: false
  }
}).done(function( html ) {
  $("#results").append(html);
});

Это старый пост, но, возможно, кто-то найдет это полезным.

У меня та же проблема, и в моем случае проблема была в методе, который был вызван с помощью ajax. Проблема была в перенаправлении, которое было установлено в методе. Таким образом, исходя из этого, вы не можете использовать как ajax, так и перенаправление (на стороне сервера), и я удалил redirect() Функция из метода, я все работает, как ожидалось. Кстати, я использую codeigniter,

Увидеть statusCode собственность вашего .ajax() вызов

Пример:

$.ajax({
  statusCode: {
    303: function() {
      alert("page not found");
    }
  }
});
Другие вопросы по тегам