是否可以使用 POST 方法重定向?
还是应该始终使用 GET 进行重定向?
这样做的用途是在电子商务网站的订单流程的最后步骤中,将数据发送到支付处理器,而无需为用户引入额外的步骤。
是否可以使用 POST 方法重定向?
还是应该始终使用 GET 进行重定向?
这样做的用途是在电子商务网站的订单流程的最后步骤中,将数据发送到支付处理器,而无需为用户引入额外的步骤。
POST 请求无法进行重定向 - 它是HTTP/1.1 协议的一部分。
您可以引入另一个步骤,其中包含要发布到支付处理器的表单数据,或者您可以从您的应用程序发送帖子(我在使用 PROTX 时所做的事情)。
我通过显示包含所有产品和运费等的摘要页面“解决”了这个问题,典型的“确认并支付您的购买,单击下面的继续按钮”类型消息。继续按钮使网站将产品数据和所有内容发布到支付处理器。
简短的回答 - 用户还有另一个步骤。然而,关键是让它看起来尽可能自然,并尽可能多地成为结账体验的一部分。这样,它不会像“只是另一个步骤”那样出现太多。
但是,如果您确实遇到了更好的方法,我会很想知道它是什么:)
使用简单的 javascript 行,您可以让 POST 表单自行发布(form.submit())。然后,您可以隐藏表单并向用户显示简单的“请稍候...”消息,同时将表单提交给支付处理器。
这个想法是在您使用 :post 方法生成表单时进行“重定向”。
我遇到了同样的问题并将解决方案提取到 gemrepost中,因此它为您完成了所有工作,因此无需使用表单创建单独的视图,只需使用redirect_post()控制器上提供的 gem 功能即可。
class MyController < ActionController::Base
...
def some_action
redirect_post('url', params: {}, options: {})
end
...
end
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>