我有一些信息从PHP传递到javascript(不是AJAX调用)来初始化一些动态内容。
在服务器端我有
echo 'var ' . $controlID . '_json = JSON.parse(\'' . $control->getOptions() . '\');';
其中$ control-> getOptions是
public function getOptions() {
//some code to build an array here
return json_encode($somearray);
}
导致以下javascript代码浏览器
var ControlName_json = JSON.parse('/*JSON OUTPUT HERE */');
现在,由于某种原因,这会产生错误。 (错误,意外的令牌a)。我查了一下,我正在使用的浏览器都有JSON。 但是,这确实有效:
echo 'var ' . $controlID . '_json = ' . $control->getOptions() ';';
直接将变量指定为对象有什么问题吗?那可能会以某种方式'打破'javascript吗?
为了完整性,导致问题的特定JSON在下面,但是因为它是由json_encode创建的,所以我不确定它是否重要。
{"o0":[{"text":"aguapop","value":"aguapop","selected":false,"parentID":0,"attributes":" value=\"aguapop\""},{"text":"default","value":"default","selected":false,"parentID":0,"attributes":" value=\"default\""},{"text":"fluid","value":"fluid","selected":false,"parentID":0,"attributes":" value=\"fluid\""},{"text":"fresh","value":"fresh","selected":false,"parentID":0,"attributes":" value=\"fresh\""},{"text":"gel","value":"gel","selected":false,"parentID":0,"attributes":" value=\"gel\""},{"text":"professional","value":"professional","selected":false,"parentID":0,"attributes":" value=\"professional\""},{"text":"professional-rtl","value":"professional-rtl","selected":false,"parentID":0,"attributes":" value=\"professional-rtl\""},{"text":"silverwolf","value":"silverwolf","selected":false,"parentID":0,"attributes":" value=\"silverwolf\""},{"text":"wood","value":"wood","selected":false,"parentID":0,"attributes":" value=\"wood\""}]}
答案 0 :(得分:1)
在JS中,不需要解析JSON,只需将其直接分配给变量即可。使用您的JSON示例为JSfiddle工作:
echo 'var ' . $controlID . '_json = '. $control->getOptions() . ';';
扔进JSON.parse并在意外令牌上失败。
答案 1 :(得分:1)
问题在于解析"attributes"
属性,其中没有一个是有效的JSON值,例如你有:
"attributes":" value=\"wood\"
在你的json字符串中,当我把它改为:
"attributes":" value='wood'"
或
"attributes":" value=\'wood\'"
问题解决了。
另一种方法是不使用JSON.pars
e,尽管json中的"attributes"
值无法在JSON.parse
中解析,但它可能是有效的JavaScript对象,所以你可以这样做:
echo 'var ' . $controlID . '_json = ' . $control->getOptions() . ';';
答案 2 :(得分:1)
您应该将JSON编码为最后一步。运行这个简单的示例,并检查您的JavaScript控制台。
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
//print_r($cars);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>JSON Parse</title>
<script>
var output = '<?php echo json_encode($cars); ?>';
console.log(JSON.parse(output));
</script>
</head>
<body>
</body>
</html>