PHP处理JSON发送的数据

时间:2010-10-25 13:20:29

标签: php javascript json jquery

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

这是我的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);
    }
});

这是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));

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


这是我得到的:

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

var_dump(file_get_contents('php://input'));

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

谢谢,一如既往地


我想我已经钉了它:

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

$x =  json_decode($_POST['kkt'], true);
echo $x['myPostData']['address1'];

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

5 个答案:

答案 0 :(得分:6)

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

尝试使用

$x = json_decode($_POST[0]);

虽然,我会做的是:

var out = JSON.stringify({'myPostData' : JSON.stringify(jsonData) });

然后:

$x = json_decode($_POST['myPostData']);

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

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

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

答案 1 :(得分:2)

我发现只删除此行

contentType: "application/json; charset=utf-8",

然后你可以操作字符串

中的数据

答案 2 :(得分:1)

如果您想要做的就是将另一端转换为PHP数组,是否有理由使用JSON.stringify?为什么不

$.ajax({
    type: "POST",
    url: "joaca2.php",
    data: jsonData, //or whatever name
    dataType: "html",
    success: function (response) {
        alert(response);
    }
});

然后在PHP中

var_dump($_POST);

这会将数据作为键值对传递给您的脚本,而不是膨胀的JSON表示。 HTTP编码(由jQuery本地完成)对你来说应该足够了。

答案 3 :(得分:1)

您正在尝试在整个POST上运行json_decode,这是一个数组。您应该了解哪个键包含您的ajax字符串,并将其命名为:

json_decode($_POST['key'])

了解你的密钥是如何调用的,只需使用var_dump转储$ _POST ...

答案 4 :(得分:0)

dataType:“html”不应该是dataType:“json”?