如何用PHP变量$jaar填充JavaScript数组?输出不符合预期
问题:PHP生成的JavaScript数组输出不符合预期
你现在碰到的问题很典型——通过PHP输出的JS变量db_jaar,alert出来是带引号的字符串格式["2018","2018"],但直接在JS里定义数组var db_jaar = ["2018","2018"]时,alert出来是你想要的2018,2018。
问题根源
你在PHP里把$jaar拼成了类似数组的字符串,然后用单引号把它包裹起来赋值给db_jaar了,这就导致JS把它识别成字符串,而不是真正的数组。比如你的PHP输出的实际是:
var db_jaar = '["2018","2018"]'
这本质是个字符串值,不是数组对象。
解决方法
这里给你三种可行的方案,推荐用第二种:
方案一:去掉赋值时的引号
直接把PHP生成的数组格式字符串作为JS数组赋值,不要加引号:
<?php $jaar = "["; $result = mysql_query("SELECT jaar FROM agenda"); while( $row=mysql_fetch_array($result, MYSQL_NUM) ) { $jaar .= "\"" . $row[0] . "\""; $jaar .= ","; } $jaar{ strlen($jaar)-1 } = ']'; // 去掉包裹$jaar的单引号 echo "<script type='text/javascript'>var db_jaar = " . $jaar ."</script>"; ?>
这样输出的JS代码就是var db_jaar = ["2018","2018"],JS会把它当成数组处理,alert时就会显示2018,2018。
方案二:用json_encode自动转换(推荐)
手动拼接字符串容易出错(比如最后一个逗号的处理),用PHP的json_encode函数可以直接把PHP数组转换成JS能识别的数组格式,省心又安全:
<?php $jaar_list = []; $result = mysql_query("SELECT jaar FROM agenda"); while( $row=mysql_fetch_array($result, MYSQL_NUM) ) { $jaar_list[] = $row[0]; // 把年份存入PHP数组 } // 直接转成JS数组格式输出 echo "<script type='text/javascript'>var db_jaar = " . json_encode($jaar_list) ."</script>"; ?>
这种方法还能自动处理特殊字符,避免出现JS语法错误,而且代码更简洁。
方案三:在JS中解析字符串为数组
如果没法修改PHP代码,也可以在JS里用JSON.parse()把字符串转成数组:
// 把字符串转成数组 var db_jaar = JSON.parse(db_jaar); alert(db_jaar); // 现在会显示2018,2018
额外提醒
另外注意mysql_*系列函数已经被PHP废弃了,存在安全和兼容性问题,建议改用mysqli_*扩展或者PDO来操作数据库哦。
内容的提问来源于stack exchange,提问作者Mike Traa
相关产品推荐
相关产品推荐

