使用非标准 POST 数据格式提交表单
Submitting Form with non standard POST data format
我在 PHP 页面中嵌入了一个标准 HTML 表单,post 发送到由第三方托管和管理的外部职位申请 API。问题是他们的表单不像往常一样期望加载 $_POST 参数,而是需要一个格式如下的单个 $_POST 参数 ('params'):
params="Prop2:title;Prop4:lastname;Prop6:firstname;"
依此类推 - 大约有 30 个字段。
如何获取表单输入并将其转换为单个长字符串?这是否需要在提交和 post 之间进行某种形式的中间步骤(在这种情况下我将如何进行中间步骤?)还是我在这里遗漏了一些更基本的东西?
下面的示例表单使用预先提交了所需参数的测试文本区域输入,但显然忽略了实际的名字姓氏输入。
<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>
为了混淆问题,一些输入是上传字段,但接下来我会担心的!
是JSON?
如果是,请使用 jQuery。 jquery ajax doc
您可以使用 javascript 预处理表单数据,然后 post 通过 Ajax 将其发送到他们的 url。获取数据:
params="firstname:"+$("#firstname").val() + "; lastname: " + ....
到post吧,可以用ajaxPOST..
$.Post(url, {data})
可以在 jquery POST 文档中找到更多详细信息
我会尝试一个非常基本的方法:
$('#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>
我遍历每个元素并收集值。然后我用你的值附加一个隐藏的输入
我在 PHP 页面中嵌入了一个标准 HTML 表单,post 发送到由第三方托管和管理的外部职位申请 API。问题是他们的表单不像往常一样期望加载 $_POST 参数,而是需要一个格式如下的单个 $_POST 参数 ('params'):
params="Prop2:title;Prop4:lastname;Prop6:firstname;"
依此类推 - 大约有 30 个字段。
如何获取表单输入并将其转换为单个长字符串?这是否需要在提交和 post 之间进行某种形式的中间步骤(在这种情况下我将如何进行中间步骤?)还是我在这里遗漏了一些更基本的东西?
下面的示例表单使用预先提交了所需参数的测试文本区域输入,但显然忽略了实际的名字姓氏输入。
<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>
为了混淆问题,一些输入是上传字段,但接下来我会担心的!
是JSON? 如果是,请使用 jQuery。 jquery ajax doc
您可以使用 javascript 预处理表单数据,然后 post 通过 Ajax 将其发送到他们的 url。获取数据:
params="firstname:"+$("#firstname").val() + "; lastname: " + ....
到post吧,可以用ajaxPOST..
$.Post(url, {data})
可以在 jquery POST 文档中找到更多详细信息
我会尝试一个非常基本的方法:
$('#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>
我遍历每个元素并收集值。然后我用你的值附加一个隐藏的输入