2011-09-16 96 views
2

我有一個JavaScript對象,我編碼爲Json並將數據發送到PHP。不幸的是,PHP無法將JSON字符串解碼爲數組。我迷失在這一點上。JavaScript對象給Json。 PHP無法解碼序列化的JSON

jQuery的

sendData = {city: 48, fullName: 'John'}; 
sendData = JSON.stringify(sendData); 

$.get("ajax/getter.php", { get: "info", data: sendData },function(data){ 
    // DO STH with returned data 
}); 

OUTPUT:{"city":48,"fullName":"John"}

PHP部分

<?php 
$data = $_GET['data']; 
$data = json_decode($data); 
var_dump($data); 
?> 

OUTPUT:NULL

如果有人能告訴我我做錯了什麼,我會很高興。

+1

var_dump($ _GET),看看你在那裏有什麼。 – AbiusX

+1

如果數據無法解碼,json_decode返回null。我懷疑有一些URL編碼問題。你可以var_dump($ _ GET ['data']);並看看輸出是什麼?可能有需要非轉義/解碼的轉義字符或網址編碼字符。 – drew010

+0

什麼是打印json_last_error()? –

回答

8

您必須啓用magic_quotes_gpc,並在$_GET['data'],所有"字符都被轉義。

Disable magic_quotes_gpc。如果不行,請使用stripslashes

$data = json_decode(stripslashes($_GET['data'])) 
+0

+1的答案。這一定是問題。爲了使代碼具有可移植性,請執行'if(function_exists(「get_magic_quotes_gpc」)&& get_magic_quotes_gpc()){stripslashes($ _ GET ['data']);}' –

+0

自PHP4起存在get_magic_quotes_gpc,我認爲您可以認爲它存在:) – arnaud576875

+0

謝謝你的幫助。讀完你的評論後,我想起了我的安全類(它正在過濾所有的$ _GET和$ _POST)。一旦我做了必要的更改,一切都恢復正常。我想有時會發生這樣的事情(最近發生了很多事情,我想我需要休息一下) – Revenant