【问题标题】:Post Json String get NULL发布 Json 字符串获取 NULL
【发布时间】:2018-05-30 23:03:40
【问题描述】:

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

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);
});

稍后我尝试使用以下方法将 Final 数组转换为 Json 字符串:

jsonData = JSON.stringify(jsonObj);

我得到了这个字符串:

[{"s-file[]":"Prueba 3"},{"text_file[]":"ORT0000133.pdf"},{"idform":"f-gen-desk"},{"idprocess":"p-save"}]

我用这个把这个发送到 PHP 服务器,因为我用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>';

输出:我得到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
&
"

我可以确定链条已损坏,但我不知道为什么或如何或如何修复它。

【问题讨论】:

标签: javascript php jquery json


【解决方案1】:

更简单的发送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] 接收各种字段

【讨论】:

    【解决方案2】:

    问题可能与使用有关:

    $_GET  = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
    $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
    

    https://stackoverflow.com/a/9854121/963200

    POSTGET读取数据后需要解决和使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2018-05-08
      相关资源
      最近更新 更多