POST JSON字符串GET NULL

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (131)

我已经将表单的所有条目转换为对象,然后使用该对象填充数组:

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]

扫码关注云+社区

领取腾讯云代金券