JSON编码/解码不能正常工作

时间:2011-10-27 02:15:38

标签: php javascript json

我正在准备并将我的PHP文件中的JSON字符串发送到我的Javascript函数,如下所示:

$json = array();
$json['slice'] = false;
$json['G500'] = false;
$json['KG1'] = false;   

$encoded = json_encode($json);
die($encoded);

但是,在我的JS函数中,如果我这样做,它就无法解码JSON对象:

var d = req.responseText;                                           
var jsonObject = eval(d);

唯一的方法,我可以通过手动添加括号来获取JSON对象eval

jsonObject = eval("(" + d + ")");

我也有同样的问题反过来。将JSON对象发送到PHP并尝试解码它失败。我相信在尝试解码之前我需要删除PHP脚本中的括号。

为什么会这样?我能做些什么来解决这种不兼容问题吗?

编辑:

如果我使用JSON.parse,PHP到JS现在正在运行。我还是遇到了麻烦。

这就是我将数据发送到PHP的方式:

var JSONstring = 
{
    "Product": document.getElementById('item').value, 
    "Size": document.getElementById('size').value,
    "Quantity": document.getElementById('quantity').value                                                   
};

url = "maintainOrder.php?json=" + JSON.stringify(JSONstring);

req.open("GET", url, true);

但是,PHP脚本无法对其进行解码。

$newItem = json_decode($_GET['json']);

array_push($_SESSION['order'],$newItem);

4 个答案:

答案 0 :(得分:4)

您的Javascript

eval在导致{字符because of an ambiguity with block scope时遇到问题。

使用括号强制将输入解析为表达式是一种解决方案,但您应该完全避免使用evaluse a proper JSON decoding function


您的PHP

我们需要查看您发送到PHP脚本的数据,以了解它无法解析的原因。通常,只要JSONLint接受您的JSON,PHP的json_decode也是如此。那就试试吧。

答案 1 :(得分:3)

对于php到javascript问题,请参阅Tomalak Geret'kal的答案。

对于javascript到php,也许我有解决方案:

如果你想在php中使用关联数组,那么你必须将关联参数作为true传递给json_decode(默认为false)

示例:

$array = json_decode($jsonString, true);

我被这种情况咬了几次:默认情况下,json_decode尝试创建一个对象,如果它接收到一个javascript对象(如果你想到它就很有意义)并且你必须强制它渲染一个关联数组,如果你需要这种行为

答案 2 :(得分:0)

我认为您需要进行一些字符串处理,您需要做的就是回显并查看JSON字符串的确切格式并确保它符合标准格式,然后在服务器端和客户端使用字符串处理达到预期的效果

答案 3 :(得分:0)

你确定php没有在json文本中添加斜杠吗?尝试将json文本保存在服务器端的文件中以验证

相关问题