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

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

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

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

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

изменить

10.3.4 303 См. Другое

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

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

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


person keinabel    schedule 02.05.2013    source источник
comment
У меня нет доступа к серверу, кроме http-запросов   -  person keinabel    schedule 02.05.2013


Ответы (4)


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

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

person badunk    schedule 21.05.2013
comment
Это помогло мне понять, почему IE не возвращает тело ответа JS для 303 (хотя Chrome делает). Спасибо! - person Dave Clausen; 15.08.2015

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

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

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

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

person Brane    schedule 20.11.2015

См. свойство statusCode вашего .ajax() вызова.

Пример :

$.ajax({
  statusCode: {
    303: function() {
      alert("page not found");
    }
  }
});
person Nick Andriopoulos    schedule 02.05.2013
comment
как я уже сказал: При проверке кода состояния и ответа на мой запрос $.ajax() будет ответ второго запроса, а также код состояния 200 http. .. то же самое. для этого подхода. Я попробовал это с помощью $.ajax({ statusCode: { 303: function() { alert(303); }, 200: function() { alert(200); } } }); он всегда переходит к методу 200. - person keinabel; 02.05.2013
comment
Есть ли решение, как получить данные ответа 303? - person user3206010; 21.11.2014