Rails UJS响应未命中目标div,js.erb存在什么错误?
.js.erb代码错误定位与修正
报错产生的底层原因
页面抛出的“private fields are not currently supported”错误,本质是远程返回的js.erb脚本本身存在语法错误,无法被浏览器JS引擎正常解析。Rails UJS执行远程返回脚本时,会将脚本挂载到应用全局JS上下文运行,因此错误堆栈会关联到应用打包的JS文件,不会单独标注是远程返回内容的问题;脚本连语法校验都通不过,自然无法执行DOM插入逻辑,页面也就看不到预期渲染的HTML块。
具体错误点
对照原始js.erb代码$(div#afamilis').append('<%= j render('afamily') %>'),存在两处直接触发解析失败的问题:
- 选择器未被包裹为合法JS字符串
div#afamilis是CSS选择器,必须以字符串形式作为参数传入jQuery选择器。代码中省略了开头的单引号,JS引擎解析时会把div识别为未声明的标识符,紧随其后的#会被按照ES2022类私有字段的语法规则解析,即尝试访问div对象的私有成员afamilis,直接触发私有字段不支持的语法错误,和实际报错信息完全匹配。 - 字符串引号配对断裂
原代码写为$(div#afamilis'),左括号后缺少起始单引号,末尾的单引号没有对应匹配的起始引号,字符串结构本身不符合JS语法规范。
修正方案
由于目标元素afamilis是全局唯一的id元素,不需要额外的div标签做选择限定,可直接使用id选择器:
$('#afamilis').append('<%= j render("afamily") %>');
若需保留div标签的选择限定,补充完整的引号匹配即可:
$('div#afamilis').append('<%= j render("afamily") %>');
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

