【发布时间】:2010-11-02 09:42:27
【问题描述】:
是否可以使用 POST 方法进行重定向?
还是应该始终使用 GET 进行重定向?
用于电子商务网站订单流程的最后步骤,将数据发送到支付处理器,而无需为用户引入额外的步骤。
【问题讨论】:
-
这整个东西看起来很老了,不考虑HTML5,这篇文章应该被删除吗?
标签: ruby-on-rails ruby redirect
是否可以使用 POST 方法进行重定向?
还是应该始终使用 GET 进行重定向?
用于电子商务网站订单流程的最后步骤,将数据发送到支付处理器,而无需为用户引入额外的步骤。
【问题讨论】:
标签: ruby-on-rails ruby redirect
POST 请求无法重定向 - 它是 part of the HTTP/1.1 protocol。
您可以引入另一个步骤,其中包含要发布到支付处理器的表单数据,或者您可以从您的应用程序发送帖子(我在使用 PROTX 时所做的事情)。
【讨论】:
我通过显示包含所有产品和运费等的摘要页面“解决”了这个问题,典型的“确认并支付您的购买,点击下面的继续按钮”类型的消息。继续按钮使网站将产品数据和所有内容发布到支付处理器。
简短的回答 - 是用户的另一个步骤。然而,关键是让它看起来尽可能自然,并且尽可能多地成为结账体验的一部分。这样一来,它就不会让人觉得“只是又迈出了一步”。
但是,如果您确实遇到了更好的方法,我会很想知道它是什么:)
【讨论】:
使用简单的 javascript 行,您可以让您的 POST 表单自行发布 (form.submit())。然后,您可以隐藏表单并向用户显示简单的“请稍候...”消息,同时将表单提交给支付处理器。
【讨论】:
这个想法是在后台使用 :post 方法生成表单时进行“重定向”。
我遇到了同样的问题,并将解决方案提取到 gem repost 中,所以它为您完成了所有工作,因此无需使用表单创建单独的视图,只需使用 gem 提供的函数 @ 987654322@ 在您的控制器上。
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>
【讨论】: