2016-06-20 78 views
-3

如果这是重复的问题,我很抱歉。我已经寻找答案,但似乎没有任何工作。无法访问通过POST发送给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 

我在做什么错?

+0

use dataType:“json”, –

+0

尝试查看'var_dump($ _ REQUEST [“g”])''的输出。它是什么样子的?它是一个字符串,一个PHP数组还是一个JSON编码的数组? – Ben

+0

试试这个$ g ['AP']; – JYoThI

回答

4

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

您需要先解析它。

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

您还有一些次要问题。


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

data : "g="+grid, 

应该是:

data : { g: grid }, 

你不应该需要从_REQUEST $/POST/GET碾过输入的stripslashes。

如果您没有打开magic quotes,那么如果传入的数据包含斜杠,它可能会中断传入的数据。

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


在JSON中嵌套JSON是愚蠢的。它使数据膨胀并使其阅读更多工作。

"grid": JSON.stringify(hz), 

应该是:

grid: hz, 

$_REQUEST可以得到从查询字符串数据,或请求主体,或饼干。你知道它来自请求主体,所以只需使用$_POST来消除歧义。

+0

其实,如果我添加stripslashes函数,它给了我同样的错误。如果我删除它并解码,那么它就可以工作。 – ALR

+0

@ALR - 我确实说过它有可能破坏你的数据。显然它已经。 – Quentin

+0

谢谢。我接受了您的建议,并删除了嵌入的JSON和URL编码的JSON。这些反光带仍然会让它突然破裂,所以我只是把它扔掉了。 – ALR

0

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

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

或者,如果你想看到完整的数组,然后使用,

print_r($json_de); 

希望这会帮助你。