将变量从PHP传递给JavaScript

时间:2012-03-10 20:47:49

标签: php javascript ajax

我正在使用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 ')'

请你帮我解决这个问题吗? 非常感谢。

3 个答案:

答案 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