Подробнее о переадресации 303

Вчера Питер Боутон упомянул, что 1#comment29367823_19071643">Переадресация 303 может использоваться для преобразования в удобный для обновления запрос GET.

В: Как это делается? Предположим, у меня есть форма:

<form method="post">
<button type="submit" name="Save">Save</button>
</form>

Тогда как сделать перенаправление 303, чтобы пользователь не отправил то же самое, нажав F5?

Примечание. Начиная с начальной загрузки 3, я теперь использую кнопку type=submit вместо input type=submit.


person Phillip Senn    schedule 05.11.2013    source источник


Ответы (2)


Вы можете использовать

<cflocation url = "newpage.cfm" addToken = "no" statusCode = "303">

См. https://learn.adobe.com/wiki/display/coldfusionen/cflocation для более подробной информации

person James A Mohler    schedule 05.11.2013
comment
Но тогда я бы потерял все значения поля ввода, не так ли? Причина, по которой я самостоятельно отправляю, заключается в том, что что-то не проходит проверку. - person Phillip Senn; 06.11.2013
comment
Вы используете <cflocation> только в том случае, если ваша почтовая операция прошла успешно. В противном случае повторно заполните форму - person James A Mohler; 06.11.2013
comment
Ой. Если есть что-то недопустимое, то я должен поместить свои значения формы в область сеанса, выполнить cflocate обратно в исходную форму и повторно заполнить значения формы из области сеанса? - person Phillip Senn; 06.11.2013
comment
Если форма действительна, выполните перемещение, иначе заполните заново. Переменные сеанса не используются ни для одной из операций. - person James A Mohler; 06.11.2013
comment
О, я понял тебя. После самостоятельной публикации перенаправьте на новую страницу. Или на самом деле, сделайте cflocate обратно на ту же страницу, чтобы это больше не было сообщением. - person Phillip Senn; 06.11.2013
comment
Но при чем тут 303? - person Phillip Senn; 06.11.2013
comment
Вы задаете вопрос о жизненном цикле запроса? - person James A Mohler; 06.11.2013

Одна идея, с которой я играю, — вообще не отправлять форму. Вместо этого я меняю кнопку type="submit" на кнопку type="button" и заставляю JavaScript выполнять вызов AJAX для сохранения формы, а затем выполняю window.replace, чтобы, когда пользователь нажимает кнопку "Назад", у него не было длинный хвост истории браузера:

Вот моя форма:

<form method="post">
   <button type="button" id="Save">Save</button>
</form>

И вот мой JavaScript:

(function() {
    $(document).on('click','#Save',SaveClicked);
    function SaveClicked() {
        var local = {};

        local.data = {};
        local.data.method = 'Save';
        local.dataType = 'text'; // no return value.
        local.Promise = $.ajax('xxx.cfc',local);
        local.Promise.done(done);
        local.Promise.fail(fail);
    }
    function done(data, textStatus, jqXHR) {
        window.location.replace(window.location.pathname);
    }
    function fail(jqXHR, textStatus, errorThrown) {
        debugger;
    }
})();
person Phillip Senn    schedule 14.11.2013