无法通过POST访问发送给PHP的JSON对象

时间:2016-06-20 11:09:52

标签: javascript php json

如果这是一个重复的问题,我很抱歉。我找了一个答案,但似乎没什么用。

我试图通过POST将相当大的JSON对象发送到PHP文件。

这是我的JavaScript代码:

var grid = 
    {
        "user": 1,
        "grid": JSON.stringify(hz),
        "week": WEEK,
        "AP": AP,
        "X_VAL": X_VAL,
        "Y_VAL": Y_VAL
    };

    grid = JSON.stringify(grid);

$.ajax({
        url:"php/saveGrid.php",
        type: "POST",
        data : "g="+grid,
        success: function (data, textStatus, jqXHR) 
        {
            console.log(data);
        }
    });

这是我的PHP代码:

$g = stripslashes($_REQUEST["g"]);
echo $AP = $g->AP;

但是这会返回一个错误,上面写着:

Trying to get property of non-object

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您的主要问题是您正在尝试将JSON字符串视为PHP对象。

您需要先解析它。

$g = stripslashes($_REQUEST["g"]);
$g = json_decode($g);
echo $AP = $g->AP;

您还有一些次要问题。

您无法对JSON进行URL编码,因此如果它包含URLS中具有特殊含义的字符,它将会中断。

data : "g="+grid,

应该是:

data : { g: grid },

您不需要在$ _REQUEST / POST / GET的输入上运行stripslashes。

如果您没有启用magic quotes,那么如果收到的数据包含斜杠,它可能会中断。

如果您确实启用了魔术引号,那么您应该关闭它们或升级到现代版本的PHP(不支持它们)。

将JSON嵌套在JSON中是愚蠢的。它使数据膨胀并使其更易于阅读。

"grid": JSON.stringify(hz),

应该是:

 grid: hz,

$_REQUEST可以从查询字符串,请求正文或cookie中获取数据。您知道它正在请求正文中,因此只需使用$_POST来消除歧义。

答案 1 :(得分:0)

您需要解码json对象,然后才能将其用作数组。试试,json_decode。像,

$g = stripslashes($_REQUEST["g"]);
$json_de=json_decode($g);
echo $AP = $json_de['AP'];

或者,如果您想查看完整数组,请使用

print_r($json_de);

希望这会对你有所帮助。