2011-09-16 61 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