如何反序列化服务器部分中的 JSON 数据

How to unserialize the JSON data in server part

我有一个简单的表格,我尝试 post 使用 jQuery post JSON 格式。表格正在 post 但我的问题在 PHP 部分。我无法获取数据。从其他堆栈问题中,我找到了只做 $_POST['FirstName'] 的解决方案,但我得到的结果是 "FirstName=john&LastName=plar&Address=home&PhoneNumber=23423423".

如何解码这个 JSON 数据?以下是我到目前为止尝试过的代码。谢谢。

<form action="user.php" method="post" id="myForm">
    First Name: <input type="text" name="FirstName" />
    Last Name: <input type="text" name="LastName" />
    Address: <input type="text" name="Address" />
    Phone: <input type="text" name="PhoneNumber" />
    <input type="submit" id="submit" value="Submit"/> 
</form>

<script>
$("#submit").on('click', function(e){
    e.preventDefault();
    var data = $("#myForm input").serialize();
    $.post('user.php',{"data":JSON.stringify(data)},function(data){

    },'json');

})
</script>

user.php

$object =$_POST['data'];
$array = json_decode($object);
print_r($object);

您根本不需要使用 JSON,只需 serialize and upload 表格即可。

$("#submit").on('click', function(e){
    e.preventDefault();
    $.post(
        'user.php',
        $("#myForm").serialize(),
        function(data, textStatus){
            // do stuff with the response
        }
    );
});

然后在你的 PHP

<?php
echo $_POST["FirstName"];
// etc

您可以对脚本和 PHP 代码进行一些更改,以获得不需要反序列化的本机 $_POST 数据:

更改脚本使发布的数据只是您的序列化形式:

$("#submit").on('click', function(e){
    e.preventDefault();
    $.post('user.php',{$("#myForm").serialize()},function(data){});
});

并且在您的 PHP 代码中,只需转储您的 $_POST 变量:

var_dump($_POST);

你可以得到这样的结果:

array(4) {
  ["FirstName"]=>
  string(7) "b j hhj"
  ["LastName"]=>
  string(7) "bhjbhj "
  ["Address"]=>
  string(5) "jhjjh"
  ["PhoneNumber"]=>
  string(0) ""
}

这比序列化和反序列化效率更高。