redirect_to используя POST в рельсах - PullRequest
59 голосов
/ 12 июня 2009

Можно ли перенаправить, используя метод POST?
Или перенаправления всегда должны выполняться с помощью GET?

Это используется на последних этапах процесса заказа для сайта электронной коммерции, чтобы отправлять данные обработчику платежей без дополнительных действий для пользователя.

Ответы [ 5 ]

79 голосов
/ 12 июня 2009

Перенаправление невозможно с запросами POST - это часть протокола HTTP / 1.1 .

Вы можете либо ввести еще один шаг, содержащий данные формы, которые должны быть отправлены в обработчик платежей, либо вы можете отправить сообщение из своего приложения (что я и сделал при работе с PROTX).

14 голосов
/ 12 июня 2009

Я «решил» проблему, отобразив сводную страницу со всеми продуктами, расходами на доставку и т. Д., С типичным сообщением типа «подтвердить и оплатить покупки, нажмите кнопку« Продолжить »ниже». Кнопка «Продолжить» заставляет сайт отправлять данные о продукте и все, что находится в процессоре платежей.

Краткий ответ - там это еще один шаг для пользователя. Тем не менее, ключ состоит в том, чтобы сделать его как можно более естественным и максимально полезным. Таким образом, это не кажется слишком «просто еще одним шагом».

Однако, если вы делаете лучший путь, мне будет очень интересно услышать, что это было:)

11 голосов
/ 12 июня 2009

С простой строкой javascript вы можете иметь свою форму POST для публикации себя ( form.submit () ). Затем вы можете скрыть форму и отобразить для пользователя простое сообщение «Пожалуйста, подождите ...», пока форма отправляется обработчику платежей.

0 голосов
/ 22 марта 2019

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>
0 голосов
/ 25 января 2019

Идея состоит в том, чтобы сделать «перенаправление», в то время как под капотом вы генерируете форму с помощью метода: post.

Я столкнулся с той же проблемой и извлек решение в gem repost, поэтому он выполняет всю эту работу за вас, поэтому не нужно создавать отдельное представление с формой, просто используйте предоставляемую функцией gem redirect_post() на вашем контроллере.

class MyController < ActionController::Base
...
  def some_action
    redirect_post('url', params: {}, options: {})
  end
...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...