66

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

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

4

5 回答 5

84

POST 请求无法进行重定向 - 它是HTTP/1.1 协议的一部分

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

于 2009-06-12T08:30:33.457 回答
14

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

简短的回答 - 用户还有另一个步骤。然而,关键是让它看起来尽可能自然,并尽可能多地成为结账体验的一部分。这样,它不会像“只是另一个步骤”那样出现太多。

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

于 2009-06-12T09:02:14.237 回答
11

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

于 2009-06-12T09:47:06.877 回答
7

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

我遇到了同样的问题并将解决方案提取到 gemrepost中,因此它为您完成了所有工作,因此无需使用表单创建单独的视图,只需使用redirect_post()控制器上提供的 gem 功能即可。

class MyController < ActionController::Base
...
  def some_action
    redirect_post('url', params: {}, options: {})
  end
...
end
于 2019-01-25T12:19:56.250 回答
0

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>
于 2019-03-21T22:31:43.637 回答