如何为一个提交按钮上禁用JS的访问者做两个POST请求


How to do two POST requests for visitors with JS disabled on one submit button?

我得到了解决这个问题的帮助:用POST数据重定向。现在,我决定整个网站,甚至这个功能必须在JS禁用时工作,我需要得到一些非JS解决方案的建议。

需求是:

用户填写表格并点击按钮。

当点击表单的一部分保存在数据库和部分被发布到另一个服务器(支付服务器)。用户只需要点击一次。

如果您想让浏览器将HTTP Post请求的数据重新发送到另一个URI, HTTP/1.1协议提供307(临时重定向)响应状态码来向HTTP客户端(浏览器)发出信号:

header('HTTP/1.0 307 Temporary Redirect',$replace=true,307);
header('Location: some_new_url_here');

仔细阅读规格并查看302状态的注释。

在服务器端通过API处理支付,而不是冒着用户被浏览器显示的额外消息激怒的风险,用户必须实际决定是否执行额外的重定向。

在服务器端处理用户的请求时,使用CURL扩展向支付服务器发送请求。

如果您的用户必须重定向到某些外部网站,那么首先保存所需的数据,然后使用header()函数重定向他。请记住,在这种情况下,您将无法使用POST方法向远程支付服务器发出请求。

使用HTTP Location的重定向将使您的用户端位于另一个站点。我建议您使用curl或streams从服务器触发http请求。

他们最初建议使用AJAX的原因是为了用户体验,而不是表单能够发布的必要条件。您需要为用户提供一个单独的步骤来选择表单,或者让相同的页面重新加载或加载另一个页面。

一些伪代码,例如:

<?php
   if (!isset($_POST['form_type']) { 
       display_form_selection();
   } else {
       switch ($_GET['form_type']) {
           case 'credit_card': display_form('credit_card');
                   exit;
           case 'cash': display_form('cash');
                   exit;
           default: display_form_selection(); 
                    die()
       }
   }

你的form_selection()例程应该绘制一个表单,它有一个选择,复选框,单选按钮或任何将POST字符串或整数(用于开关)返回到你正在运行的脚本。

当页面重新加载时,它将根据传递给自己的值调用正确的display_form()。这些函数将为您想要发布到网关的任何内容设置表单。

我在这个网站的其他地方读到,使用你的表单动作不是一个好主意,你应该手动输入你的脚本名称。