PHP Ajax传递动态变量至JS时循环拼接键名取值失效问题
问题根因
- 字符串拼接运算符优先级错误:JS中
+运算符从左到右结合,遇到字符串时会直接做拼接操作,你写的'gyermekkor_error'+i+1不会优先计算i+1的数值,以i=0为例,实际拼接结果为gyermekkor_error01,和实际存在的gyermekkor_error1键名完全不匹配。 - 索引逻辑不一致:
getElementById部分你用(i+1)生成从1开始的DOM ID,但是取response.window属性时直接用从0开始的i做拼接,就算优先级正确,序号也会整体偏移1位,取不到对应值。
修复代码
把属性名的拼接逻辑和DOM ID的拼接逻辑对齐,给数值计算部分加括号保证优先执行序号计算,推荐提前存储拼接好的键名,避免重复写拼接逻辑出错:
for (var i = 0; i < gyermekek; i++) { const errorNum = i + 1; const errorKey = 'gyermekkor_error' + errorNum; document.getElementById(errorKey).innerHTML = response.window[errorKey]; }
如果习惯用ES6模板字符串,写法更简洁,能规避大部分拼接优先级问题:
for (var i = 0; i < gyermekek; i++) { const errorKey = `gyermekkor_error${i+1}`; document.getElementById(errorKey).innerHTML = response.window[errorKey]; }
调试小技巧:后续再遇到动态键名取值问题,直接在取值前打印你拼接出来的键名,和实际存在的键名做对比,就能快速定位是不是拼接错误。
内容的提问来源于stack exchange,提问作者Zente1337
相关产品推荐
相关产品推荐

