我准备了一个JSON字符串,并将其从PHP文件发送到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 to 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);
发布于 2011-10-27 10:33:06
有关php to javascript的问题,请参考Tomalak Geret‘’kal的答案。
对于php的javascript,也许我有解决方案:
如果你想在php中使用关联数组,那么你必须将assoc参数作为true传递给json_decode (默认为false)
示例:
$array = json_decode($jsonString, true);
有几次我被这个问题所困扰:默认情况下,如果json_decode接收到一个javascript对象,它会尝试创建一个对象(如果你想到这一点,它是非常有意义的),如果你需要这个行为,你必须强制它呈现一个关联数组
发布于 2011-10-27 10:25:21
你的Javascript
eval
的前导{
字符because of an ambiguity with block scope有问题。
使用圆括号强制将输入解析为表达式是一种解决方案,但您应该完全避免使用eval
和use a proper JSON decoding function。
你的PHP
我们需要查看发送到PHP脚本的数据,以了解它无法解析的原因。一般来说,只要JSONLint接受你的JSON,PHP的json_decode
也会接受。所以试一试吧。
发布于 2011-10-27 10:32:40
我认为你需要做一些字符串处理,你需要做的就是回显并查看JSON字符串的确切格式,并确保它符合标准格式,然后在服务器端和客户端使用字符串处理来达到预期的效果
https://stackoverflow.com/questions/7911044
复制相似问题