内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我已经将表单的所有条目转换为对象,然后使用该对象填充数组:
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"}]"
当我尝试用以下内容将其转换为和Array时:
试验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>';
发送json的更简单的方法是:
$.ajax({ url: url, data: jsonData, // stringified JSON contentType: 'application/json', // processData: false, type: 'POST', //cache: false, POST won't cache error: function(xhr, status, error) { alert(error); }, success: function(response) { alert(response); } });
并在php中接收
$data = json_decode(file_get_contents('php://input')[,boolean to force array]);
一般情况下,发送数据的最简单方法是使用serialize()
在窗体和发送作为默认内容类型和接收各种字段$_POST[inputName]