我正在准备并将我的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);
答案 0 :(得分:4)
eval
在导致{
字符because of an ambiguity with block scope时遇到问题。
使用括号强制将输入解析为表达式是一种解决方案,但您应该完全避免使用eval
和use a proper JSON decoding function。
我们需要查看您发送到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文本保存在服务器端的文件中以验证