2012-12-30 81 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