Как обрабатывать перенаправление statuscode 307 с помощью jquery

#javascript #html #jquery

#javascript #HTML #jquery

Вопрос:

У меня много проблем с 307 Temporary Redirect кодом состояния с помощью jquery.

У меня есть сервер apache, который при необходимости возвращает значение 307. 307 генерируется правильно (я вижу это с помощью firebug или трассировки wireshark), но, похоже, я не могу заставить перенаправление сработать.

 $.ajax({
    url: someURL,
    type: 'GET',
    processData: false,
    data: someData,
    cache: true,
    timeout: 5000,
    statusCode: {
        307: function() {
            alert('307'); // this does NOT get called
        }
    },
    error: function(request, status, error){
        try {
            console.log(request.getAllResponseHeaders());
        }
        catch (err) { }
    },
    success: function(data, textStatus, response){
        try {
            console.log(response.getAllResponseHeaders());
        }
        catch (err) { }
    });
  

Я хотел проверить заголовки, чтобы я мог перенаправлять с помощью getAllResponseHeaders() метода. Это отлично работает для 200, но 307 никогда не срабатывает (в обработчике success nor error )

Одна вещь, которую я заметил при использовании Firebug для проверки трафика, заключается в том, что сразу после перенаправления на сервер отправляется ajax GET с URL перенаправления! Однако это приводит к сбою.

Итак, что получается?

Редактировать: я пробовал это с jquery 1.5.1 и 1.6.1

Комментарии:

1. Убедитесь, что тело вашего HTTP-ответа содержит хотя бы пробел. Это поможет улучшить работу браузеров. Существует дополнительный вызов Firefox ‘Live HTTP Headers’, который может помочь в отладке этого. Вы используете jQuery версии 1.5 или выше, правильно?

2. @ Teddy. Я пробовал это с jquery 1.5.1 и 1.6.1. Кроме того, вся HTML-страница перенаправления возвращается с 307

Ответ №1:

Что ж, я провел еще некоторое исследование, и оказалось, что 307 автоматически обрабатывается браузером и не может быть перехвачен jquery.

В итоге я использовал другой StatusCode для выполнения перенаправления ( 410 Gone ).

Возможно, это не лучшее решение, но у меня нет доступа к коду сервера apache.