Javascript 如何在服务器部件中取消序列化JSON数据

Javascript 如何在服务器部件中取消序列化JSON数据,javascript,php,jquery,json,jquery-events,Javascript,Php,Jquery,Json,Jquery Events,我有一个简单的表单,我尝试使用JSON格式的jQueryPost发布它。表单正在发布,但我的问题是PHP部分。我无法得到数据。从另一个堆栈问题中,我找到了只做$\u POST['FirstName']的解决方案,但我得到的结果是“FirstName=john&LastName=plar&Address=home&PhoneNumber=23423”。 我如何解码这个JSON数据?下面是我迄今为止尝试过的代码。多谢各位 <form action="user.php" method="post

我有一个简单的表单,我尝试使用JSON格式的jQueryPost发布它。表单正在发布,但我的问题是PHP部分。我无法得到数据。从另一个堆栈问题中,我找到了只做
$\u POST['FirstName']
的解决方案,但我得到的结果是
“FirstName=john&LastName=plar&Address=home&PhoneNumber=23423”。

我如何解码这个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>

您根本不需要使用JSON,只需要使用表单

$("#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

您根本不需要使用JSON,只需使用表单即可

$("#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代码进行一些更改,以获取不需要取消序列化的本机$\u POST数据:

更改脚本以使数据过帐只是您的序列化表单:

$("#submit").on('click', function(e){
    e.preventDefault();
    $.post('user.php',{$("#myForm").serialize()},function(data){});
});
在PHP代码中,只需转储$\u POST变量:

var_dump($_POST);
你可以得到这个结果:

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

这将比多次序列化和取消序列化更有效。

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

更改脚本以使数据过帐只是您的序列化表单:

$("#submit").on('click', function(e){
    e.preventDefault();
    $.post('user.php',{$("#myForm").serialize()},function(data){});
});
在PHP代码中,只需转储$\u POST变量:

var_dump($_POST);
你可以得到这个结果:

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

这将比多次序列化和取消序列化更有效。

当我尝试您的方法时,它运行良好。但是当我使用var data=$(“#myForm”).serialize()时;$.post('user.php',{'data':data},函数(data){});为什么它不起作用。因为这不是提交表格的方式!您正在尝试将序列化表单作为字符串传递。当我尝试您的方法时,它工作正常。但是当我使用var data=$(“#myForm”).serialize()时;$.post('user.php',{'data':data},函数(data){});为什么它不起作用。因为这不是提交表格的方式!您正在尝试将序列化表单作为字符串传递。