【发布时间】:2019-02-26 16:21:34
【问题描述】:
我有一个 jQuery 脚本,每当某个 .class 输入发生变化时,它就会将隐藏的输入添加到表单中。根据用户输入,它会为其他不可编辑的列生成值,这些列也会作为隐藏输入推送到表单中。
表单输出如下所示:
<input type="hidden" name="[1008016BSTL][1][part]" value="1008016BSTL" />
<input type="hidden" name="[1008016BSTL][1][price]" value="123" />
<input type="hidden" name="[1008016BSTL][1][priceExVat]" value="102.50" />
<input type="hidden" name="[1008016BSTL][1][fee]" value="10.53" />
<input type="hidden" name="[1008016BSTL][1][profit]" value="68.41" />
这只是我试图捕获的一组数据,但其他数据相同,保存原始密钥和子密钥。
我的表单包装器如下所示:
<form method="post" id="submit-form" enctype="multipart/form-data">
<input type="submit" value="Save" />
</form>
我的 AJAX 看起来像:
$('form#submit-form').submit(function(e)
{
e.preventDefault();
let data = $('form#submit-form').serializeArray();
$.ajax({
url: '/save-pricing.php',
data: {data: JSON.stringify(data)},
type: 'post',
success: function(res)
{
console.log(res)
},
error: function(res)
{
alert('Error! I won\'t tell you what it is. But, I\'ll give you a clue: 21');
console.log(res)
}
})
})
我也试过(设置数据):
let data = $('form#submit-form').serialize();
data = JSON.stringify(data);
$.ajax({
...
data: {data: data}
...
})
以及省略.stringify() 函数。
这对 PHP 来说是这样的:
<?php
echo '<pre>'. print_r($_POST, 1) .'</pre>';
/**
* Below is for .serialize() -> output is an empty array
*
* parse_str($_POST['data'], $postData)
* echo '<pre>'. print_r($postData, 1) .'</pre>';
*/
使用.serializeArray() 简化输出(仅删除其他集合):
Array
(
[data] => [
{"name":"[1008016BSTL][1][part]","value":"1008016BSTL"},
{"name":"[1008016BSTL][1][price]","value":"123"},
{"name":"[1008016BSTL][1][priceExVat]","value":"102.50"},
{"name":"[1008016BSTL][1][fee]","value":"10.53"},
{"name":"[1008016BSTL][1][profit]","value":"68.41"}
]
)
我想这没问题,我可能可以按名称分组并合并到一个数组中,但感觉它应该已经在 jQuery 端使用 .serialize(),然后在 PHP 端使用 parse_str()。
但是,正如我所提到的,parse_str() 和 .serialize() 产生一个空数组,我不能使用它。
所以我的问题是:如何通过 jQuery 成功地将多维表单数据发送到 PHP?
编辑
添加:
dataType: 'json'
使用.serialize() 然后JSON.stringify(data),删除parse_str() 并输出:
Array
(
[\"] => Array
(
[1008016BSTL] => Array
(
[1] => Array
(
[part] => 1008016BSTL
)
)
)
)
【问题讨论】: