2012-12-30 69 views
0

我在使用PHP发送对象时遇到了问题。我在将对象发送到PHP文件之前对其进行了字符串化。JSON字符串化和解码JS/PHP

然后PHP文件使用json_decode。但解码显示一个空白变量。

我CONSOLE.LOG显示了这种作为其结构的对象:

enter image description here

及其然后送到与该给PHP:在PHP文件

console.log(my_Obj); 
    var as = JSON.stringify(my_Obj);   
    call_data('add.php?&as='+as, nxtFunc); 

现在我有此其处理情况:

$path = json_decode($_GET['as']); 
    echo $_GET['as'].'<br/>'; 
    print_r($path); 
    die; 

结果是:

[null,null,{\"8\":[null,null,null,null,null,null,[],[],[],[],[]],\"9\": 
[null,null,null,null,null,null,null,null,null,null,[]],\"10\": 
[null,null,null,null,null,null,null,null,null,null,[],[]],\"11\": 
[null,null,null,null,null,null,null,null,null,null,null,[]]}] 
<br/> 

在Chrome我XHR请求URL显示:

add.php?as=[null,null,{%228%22:[null,null,null,null,null,null,[],[],[],[],[]],%229%22:[null,null,null,null,null,null,null,null,null,null,[]],%2210%22:[null,null,null,null,null,null,null,null,null,null,[],[]],%2211%22:[null,null,null,null,null,null,null,null,null,null,null,[]]}] 

的公告显示的print_r什么。我应该不使用stringify?

回答

1

那是因为my_Obj是一个数组而不是一个对象。

试试这个:

var as = JSON.stringify({data: my_Obj}); 

注:

您还需要字符串化之前清理阵列 - 即清除掉所有空/未定义的指标。检查这个答案:https://stackoverflow.com/a/281335/921204

+0

为什么Chrome会说'[2:Object]'我以为它是由它内部的数组组成的对象? – Sir

+0

它这样说是因为它是一个只有一个元素的索引是2,值是JS对象的数组。 – techfoobar

+0

等待如何来删除空白的?例如,为什么这是不允许的:清理空数组元素将取决于:为什么这是不允许的: '[2:Object] 2:Object - > 8:Array [11] - > 6:Array [0] length:0' – Sir