如果这是一个重复的问题,我很抱歉。我找了一个答案,但似乎没什么用。
我试图通过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
我做错了什么?
答案 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);
希望这会对你有所帮助。