【问题标题】:More on 303 redirect更多关于 303 重定向的信息
【发布时间】:2013-11-05 19:57:33
【问题描述】:

昨天,Peter Boughton 提到了303 redirect can be used to transform to a refresh-friendly GET request

问:这是怎么做到的?假设我有以下表格:

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

那你怎么做一个 303 重定向来防止用户按 F5 提交同样的东西呢?

注意:从 bootstrap 3 开始,我现在使用 button type=submit 代替 input type=submit。

【问题讨论】:

    标签: coldfusion http-status-code-303


    【解决方案1】:

    你可以使用

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

    https://learn.adobe.com/wiki/display/coldfusionen/cflocation 了解更多

    【讨论】:

    • 但是我会丢失所有输入字段值,不是吗?我自行提交的原因是为了防止验证失败。
    • 只有在您的 post 操作成功时才​​使用&lt;cflocation&gt;。否则,请重新填写您的表单
    • 哦。如果有一些无效的东西,那么我应该将我的表单值放在会话范围内,执行 clocate 回到原始表单并从会话范围重新填充表单值?
    • 如果表单有效,则重新定位,否则重新填充。会话变量不用于任一操作
    • 哦,我知道了。自我发布后,重定向到新页面。或者实际上,做一个 clocate 回到同一个页面,这样它就不再是一个帖子了。
    【解决方案2】:

    我正在考虑的一个想法是根本不提交表单。相反,我将按钮 type="submit" 更改为 button 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;
        }
    })();
    

    【讨论】:

      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 2019-05-09
      • 2015-01-26
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 2019-11-26
      • 2014-05-19
      相关资源
      最近更新 更多