PHP处理JSON发送的数据

nev*_*ind 3 javascript php jquery json

我不会告诉你我已经搜索并尝试了来自互联网的数十种语法.你无法判断我是否撒谎.所以...

这是我的HTML(相关部分)的一部分:

var jsonData = {
    address: 'address',
    address1: 'address1',
    address2: 'address2'
};

var out = JSON.stringify(jsonData);

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "joaca2.php",
    data: out,
    dataType: "html",
    success: function (response) {
        alert(response);
    }
});
Run Code Online (Sandbox Code Playgroud)

这是PHP部分:

$x = json_decode($_POST, true);

// don't worry: it doesn't get to this line below
printf("<pre>%s</pre>", print_r($x, 1));
Run Code Online (Sandbox Code Playgroud)

我试图让它尽可能简单,也许今年有一段时间我会学习正确的JSON.


这是我得到的:

最后一张图是我得到的PHP部分:

var_dump(file_get_contents('php://input'));
Run Code Online (Sandbox Code Playgroud)

不要以"不明显吗?!"开头.它是.我知道那个错误说的是什么.我只是不知道如何绕过它.我怎么抓住这个帖子?我见过$ x = json_decode($ _ POST []),但这也不起作用.我用JSONlint测试了字符串化的json并验证了它.我尝试过不同类型的数组,对象,数组属性,.AJAX,.post(),. get().我不知道选择.我已经看到了各种各样的建议,我已经尝试过了.我知道我错过了一些东西,当我找到它时,我可能会爆炸或杀死我的猫.

Thanks, as always


我想我钉了它:

我修改了数据:代码中的'kkt ='+ out.现在,使用这个:

$x =  json_decode($_POST['kkt'], true);
echo $x['myPostData']['address1'];
Run Code Online (Sandbox Code Playgroud)

......我可以获得价值.问题是我不知道这是如何工作的.不过,我知道这是关键.

Fos*_*sco 6

$ _POST是所有已发布元素的数组...您只传递一个元素,但您没有为其指定名称.

尝试使用

$x = json_decode($_POST[0]);
Run Code Online (Sandbox Code Playgroud)

虽然,我会做的是:

var out = JSON.stringify({'myPostData' : JSON.stringify(jsonData) });
Run Code Online (Sandbox Code Playgroud)

然后:

$x = json_decode($_POST['myPostData']);
Run Code Online (Sandbox Code Playgroud)

如何更改原始jsonData以包含主分支:

var jsonData = { myPostData: {
    address: 'address',
    address1: 'address1',
    address2: 'address2'
} };
Run Code Online (Sandbox Code Playgroud)

然后返回原始的stringify函数调用.