如何无错误迭代jQuery数组变量的值?PHP转JSON场景排障
问题根源与解决方法
核心问题:rArray是字符串而非真正的JavaScript数组
你遇到的两个错误本质都是同一个原因:从隐藏div获取的rte值是JSON格式的字符串(比如"[3,94,83,141]"),不是JS原生数组:
- 第一个错误
cannot use 'in' operator to search for "length" in "[3,94,83,141]":$.each对字符串会尝试遍历每个字符,但这里的字符串是完整的JSON数组格式,$.each的逻辑不匹配导致报错。 - 第二个错误
Syntax error, unrecognized expression: [3,94,83,141]:$(rArray)会把字符串当成CSS选择器解析,[3,94,...]不是合法的CSS选择器语法,直接报错。
为什么直接用数组字面量没问题?
当你写rArray = [3,94,83,141]时,JS会直接识别为原生数组,$.each或forEach都能正常迭代;但从div取到的是字符串,JS不会自动把它转换成数组。
解决步骤
1. 确保Twig模板输出的JSON没有被转义
Symfony的Twig默认会自动转义HTML特殊字符,比如把JSON里的引号转成",导致JSON.parse失败。所以模板里输出时要加|raw过滤器:
<div class="rte" style="display:none">{{ rte|raw }}</div>
2. 正确解析JSON字符串为JS数组
不要用slice(1,-1)切掉括号,直接用JSON.parse解析整个字符串:
// 先获取div文本并去除可能的空白字符 var rteText = $(".rte").text().trim(); // 解析为原生JS数组 var rArray = JSON.parse(rteText);
3. 正常迭代数组
现在rArray是真正的数组,两种迭代方式都能正常工作:
// 方法1:jQuery的$.each $.each(rArray, function(index, value) { // 示例:切换id为row-xxx的表格行可见性 $('#row-' + value).toggle(); }); // 方法2:原生JS的forEach(更高效) rArray.forEach(function(value) { $('#row-' + value).toggle(); });
完整代码示例
PHP控制器代码
// 假设这是你的Symfony控制器方法 public function yourAction() { $rte = [3,94,83,141]; return $this->render('your_template.html.twig', [ 'rte' => json_encode($rte), ]); }
Twig模板代码
<div class="rte" style="display:none">{{ rte|raw }}</div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(function() { var rteText = $(".rte").text().trim(); var rArray = JSON.parse(rteText); rArray.forEach(function(rowId) { $('#row-' + rowId).toggle(); }); }); </script>
内容的提问来源于stack exchange,提问作者geoB
相关产品推荐
相关产品推荐

