【问题标题】:redirect_to using POST in rails在 Rails 中使用 POST 重定向到
【发布时间】:2010-11-02 09:42:27
【问题描述】:

是否可以使用 POST 方法进行重定向?
还是应该始终使用 GET 进行重定向?

用于电子商务网站订单流程的最后步骤,将数据发送到支付处理器,而无需为用户引入额外的步骤。

【问题讨论】:

  • 这整个东西看起来很老了,不考虑HTML5,这篇文章应该被删除吗?

标签: ruby-on-rails ruby redirect


【解决方案1】:

POST 请求无法重定向 - 它是 part of the HTTP/1.1 protocol

您可以引入另一个步骤,其中包含要发布到支付处理器的表单数据,或者您可以从您的应用程序发送帖子(我在使用 PROTX 时所做的事情)。

【讨论】:

    【解决方案2】:

    我通过显示包含所有产品和运费等的摘要页面“解决”了这个问题,典型的“确认并支付您的购买,点击下面的继续按钮”类型的消息。继续按钮使网站将产品数据和所有内容发布到支付处理器。

    简短的回答 - 用户的另一个步骤。然而,关键是让它看起来尽可能自然,并且尽可能多地成为结账体验的一部分。这样一来,它就不会让人觉得“只是又迈出了一步”。

    但是,如果您确实遇到了更好的方法,我会很想知道它是什么:)

    【讨论】:

    • 相反,您可以只显示“处理订单...”占位符并自动提交带有隐藏字段的表单。如果页面运行得足够快,用户甚至大部分时间都不会看到这个页面......
    • 这和下面Alsciende的方法差不多。完全没问题,但是您将依赖 JavaScript,因此您需要某种回退方式来应对(现在虽然不太可能,但有可能)JS 不可用的情况。
    • 是的,但这是非常微不足道的。只需将提交放在 noscript 中就可以了...
    【解决方案3】:

    使用简单的 javascript 行,您可以让您的 POST 表单自行发布 (form.submit())。然后,您可以隐藏表单并向用户显示简单的“请稍候...”消息,同时将表单提交给支付处理器。

    【讨论】:

    • 然后退回到禁用 JS 的手动“按下提交按钮”方法?这实际上不是一个坏主意......
    【解决方案4】:

    这个想法是在后台使用 :post 方法生成表单时进行“重定向”。

    我遇到了同样的问题,并将解决方案提取到 gem repost 中,所以它为您完成了所有工作,因此无需使用表单创建单独的视图,只需使用 gem 提供的函数 @ 987654322@ 在您的控制器上。

    class MyController < ActionController::Base
    ...
      def some_action
        redirect_post('url', params: {}, options: {})
      end
    ...
    end
    

    【讨论】:

      【解决方案5】:

      html hack:代替redirect_to,渲染这个html模板(基于Alsciende的回答)

      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
      
      <form id="step" name="step" action="<%= URL %>" method="POST">
        <!-- optional params -->
        <input type='hidden' name='token' value='e7295d6d1cd512a8621f1de5965b90a' />
      
      </form>
      
      <script type="text/javascript">
       $(document).ready(function () {
         setTimeout(function () {
           $("#step").submit();
         }, 0);
       });
      </script>
      

      【讨论】:

        猜你喜欢
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多