我正在准备和发送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);
唯一的方法,我可以得到它的eval
JSON对象是通过手动添加括号
jsonObject = eval("(" + d + ")");
我也有同样的问题。向PHP发送JSON对象并尝试解码失败。我相信在尝试解码之前,我需要删除PHP脚本中的括号。
为什么会发生这种情况?我能做些什么来解决这个不兼容的问题吗?
编辑:PHP到JS现在工作,如果我使用JSON.parse
。反过来我还是有问题。
这是我发送数据到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);
你的Javascript
eval
有一个{
开头字符的问题,因为块作用域有歧义。
使用括号强制将输入解析为表达式是一种解决方案,但您应该完全避免使用eval
,并使用适当的JSON解码功能。
PHP
我们需要看到的数据,你发送给你的PHP脚本知道为什么它不会解析。一般来说,只要JSONLint接受你的JSON, PHP的json_decode
也会接受。试试吧
关于php转javascript的问题,请参阅Tomalak Geret'kal的回答。
对于javascript到php也许我有解决方案:
如果你想在php中使用关联数组那么你必须将assoc参数设置为true传入json_decode(默认为false)
的例子:
$array = json_decode($jsonString, true);
我被咬了几次:默认情况下,json_decode尝试创建一个对象,如果它接收一个javascript对象(这是完美的意义,如果你认为),你必须强迫它呈现一个关联数组,如果你需要这种行为
我认为你需要做一些字符串处理,你所需要做的就是回显并查看JSON字符串的确切格式,并确保它符合标准格式,然后在服务器端和客户端使用字符串处理来达到预期的效果
你确定php没有添加斜杠到json文本吗?,尝试将json文本保存在服务器端的文件中以验证