【问题标题】:Submitting Form with non standard POST data format提交非标准 POST 数据格式的表单
【发布时间】:2015-03-18 13:49:03
【问题描述】:

我有一个嵌入在 PHP 页面中的标准 HTML 表单,该表单发布到由第三方托管和管理的外部 Job Application API。问题是他们的表单并不像往常一样期望加载 $_POST 参数,而是希望使用以下格式的单个 $_POST 参数('params'):

params="Prop2:title;Prop4:lastname;Prop6:firstname;"

等等 - 大约有 30 个字段。

如何获取表单输入并转换为单个长字符串?这是否需要在提交和发布之间进行某种形式的中间步骤(在这种情况下,我将如何进行中间步骤?)还是我在这里遗漏了一些更基本的东西?

下面的示例表单使用预先提交了所需参数的测试 textarea 输入,但显然忽略了实际的 firstname lastname 输入。

<form id="#applicationForm" method="POST" action="https://www.example.com/eternal-api">

  <input id="lastname" name="lastname" type="text" placeholder="Last name (Required)" class="input-xlarge" required="">
  <input id="firstname" name="firstname" type="text" placeholder="First Name (Required)" class="input-xlarge" required="">
  <textarea name="params" rows="2" cols="150">Prop4:Test_lastname;Prop6:test_firstname;</textarea>
  <input type="submit" value="Submit Application" class="btn btn-success">

</form>

为了混淆问题,有些输入是上传字段,但接下来我会担心!

【问题讨论】:

标签: php html forms post


【解决方案1】:

我会尝试一个非常基本的方法:

$('#applicationForm').submit(function(e) {

  var params = '';

  $(this).find('input, textarea, select').filter('[name]').each(function() {

    if ($(this).is('textarea')) {

      params += $(this).val();
      return;

    }

    params += $(this).attr('name') + ':' + $(this).val() + ';';


  });

  $(this).append($('<input>', {

    type: 'hidden',
    name: 'params',
    value: params

  }));
  

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="applicationForm" method="POST" action="https://www.example.com/eternal-api">

  <input id="lastname" name="lastname" type="text" placeholder="Last name (Required)" class="input-xlarge" required="">
  <input id="firstname" name="firstname" type="text" placeholder="First Name (Required)" class="input-xlarge" required="">
  <textarea name="params" rows="2" cols="150">Prop4:Test_lastname;Prop6:test_firstname;</textarea>
  <input type="submit" value="Submit Application" class="btn btn-success">

</form>

我循环遍历每个元素并收集值。然后我用你的值附加一个隐藏的输入

【讨论】:

  • 很好的答案 - 谢谢。唯一的问题是它需要单选按钮的两个值,但我已经用 Selects 替换了这些值,它工作正常。非常感谢
  • 是的,我忘记了单选按钮。您可以在指定只允许选中的单选按钮时使用它们(使用 :checked 作为选择器)
【解决方案2】:

您可以使用 javascript 预处理表单数据,然后通过 Ajax 将其发布到他们的 url。获取数据:

params="firstname:"+$("#firstname").val() + "; lastname: " + ....

要发布它,您可以使用 ajax POST..

$.Post(url, {data})

更多细节可以在jquery POST文档中找到

【讨论】:

  • 感谢您,非常有帮助。我可以使用 ajax 发布到外部服务器吗?我的印象是它必须在同一台服务器上?
  • 没必要,朋友!除非“其他服务器”对跨域请求有限制,否则我想应该没什么问题。如果您发现答案正确,您可以将其标记为已接受.. :)
【解决方案3】:

是 JSON 吗? 如果是,请使用 jQuery。 jquery ajax doc

【讨论】:

  • 为什么一定要在 jQuery 中?
  • 我确实看过,但由于它不是托管在同一台服务器上,我认为我不能使用 ajax?
  • 为什么选择 jQuery - 简单,有据可查:)。其他服务器没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多