我已经将表单的所有条目转换为对象,然后使用该对象填充数组:
var jsonObj = [];
var formData = new FormData();
$('[name="'+form+'"] *').not(':input[type=file], :input[type=button], :input[type=submit], :input[type=reset], [name="input_search"]').filter(':input').each(function(obj, v) {
var iObj = {}
var input = $(this);
var inputname = input.attr("name");
var val = input.val();
var inputval = val;
iObj[inputname] = inputval;
jsonObj.push(iObj);
});
稍后,我尝试使用以下代码将最终数组转换为Json字符串:
jsonData = JSON.stringify(jsonObj);
我得到了这个字符串:
[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]
我把这个发送到PHP Server,因为我用formData.append
方法发送了其他元素类型的文件:
formData.append('jsonData', jsonData);
var url = 'index.php';
$.ajax({
url: url,
data: formdata,
contentType: false,
processData: false,
type: 'POST',
cache: false,
error: function(xhr, status, error) {
alert(error);
},
success: function(response) {
alert(response);
}
});
在PHP服务器端,我尝试获取这个字符串:
echo var_dump($_POST['jsonData']);
我得到了这个字符串:
string(169) "[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]"
当我尝试将其转换为具有以下内容的数组时:
测试1:
echo '<pre>';
echo var_dump($_POST);
echo '</pre>';
输出:
array(1) {
["jsonData"]=>
string(169) "[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]"
}
测试2:
echo '<pre>';
$jsonData=$_POST['jsonData'];
$Data=json_decode($jsonData);
echo var_dump($Data);
echo '</pre>';
输出:我得到了NULL
。
我不知道我做错了什么
上次更新:
我运行这个测试:
echo '<pre>';
$jsonData = '|'.$_POST['jsonData'].'|';
$json = '|'.'[{"s-file[]":"Prueba 3"},{"text_file[]":"casa.jpg"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]'.'|';
echo $Line = mb_strlen(mb_strcut($jsonData, 0, strspn($jsonData ^ $json, "\0")));
echo '<br>';
echo $jsonData[$Line];
echo '<br>';
echo $json[$Line];
echo '<br>';
echo '</pre>';
输出
3
&
"
我可以确定链已损坏,但我不知道为什么、如何或如何修复它。
https://stackoverflow.com/questions/50614446
复制相似问题