我正在使用JSON字符串从PHP传递JavaScript中的变量:
while( $row = mysql_fetch_array($result) )
{
$tmp = array('id'=>$row['id'], 'alert_type_id'=>$row['alert_type_id'], 'deviation'=>$row['deviation'], 'threshold_low'=>$row['threshold_low'], 'threshold_high'=>$row['threshold_high']) ;
$settings[] = $tmp ;
}
echo '{"data":'.json_encode($settings).'}' ;
在Javascript中,我使用以下代码段:
console.log( result ) ;
var json = eval('('+ result +')') ;
以及控制台中显示的内容是以下错误:
1{"data":[{"id":"1","alert_type_id":"1","deviation":null,"threshold_low":"20","threshold_high":"80"}]}
SyntaxError: Expected token ')'
请你帮我解决这个问题吗? 非常感谢。
答案 0 :(得分:2)
在PHP中,您可能希望使用json_encode
来编码所有数据:
$result = array(
'data' => json_encode($settings)
);
echo json_encode($result);
其次,在您的javascript中,eval
很少(从不)是一个好主意。来自Douglas Crockford的风格指南:
eval函数是JavaScript最被误用的功能。避免它。
相反,您可能希望使用JSON.parse()
来重建服务器返回的结果:
console.log(result) ;
var resultObj = JSON.parse(result);
console.log(resultObj);
如果您的代码仍然损坏,您可能需要仔细检查您的PHP,以确保它不会超出json_encode
语句之外的任何输出。
答案 1 :(得分:1)
有些东西在你的json字符串前面输出一个“1”。在eval()期间,Javascript无法正确解析。
答案 2 :(得分:0)
那段代码无效。
在控制台中写道:
'(1{"data":[{"id":"1","alert_type_id":"1","deviation":null,"threshold_low":"20","threshold_high":"80"}]})'
这就是你传递给eval
函数的内容。我应该给你同样的错误。
如果要将该字符串保存在变量中,则需要稍微调整一下:
eval('var x =' + result);
无论如何看起来你做错了什么,再次检查为什么你需要使用“邪恶”eval
。