【发布时间】:2023-03-26 22:34:01
【问题描述】:
here 和 here 也有类似的问题,但都没有我想要的答案。我也做了很多搜索“rails format.js render”但无法解决这个问题。
在 Rails 4 中,我有一个经过验证的表单,如下所示:
<%= form_for(@message, :remote => true) do |form| %>
// don't want to call the js on submit here because
// I don't want it to execute if the form did not validate
我在控制器中调用js:
def create
@message = Message.new(params[:message])
if @message.valid?
NotificationsMailer.new_message(@message).deliver
respond_to do |format|
format.js { render "submit" }
end
else
render :new
end
end
我在“messages”文件夹中有“submit.js.erb”:
alert('js was called!');
当我提交表单时,终端会验证文件是否呈现:
Rendered messages/submit.js.erb (0.5ms)
...但是在屏幕上,什么都没有发生。没有警报,也没有执行 javascript。我也尝试创建“submit.html.erb”并将我的 javscript 包装在脚本标签中,同样的事情发生了 - 文件加载,但脚本没有执行。
为什么?我需要做什么来告诉 Rails 执行 js?
编辑:在访问了 Kelvo 的资源并尝试了很多东西之后,答案似乎是将其添加到 application.js...
$.ajaxSetup({
'beforeSend': function (xhr) {xhr.setRequestHeader('Content-Type', 'application/javascript');}
});
事实证明,我实际的“submit.js.erb”中的手动换行和缩进(因为它没有在我的 IDE 中包装)导致它无法执行,所以确实存在两个问题。
【问题讨论】:
-
你可以试试这个“format.js { render 'submit.js.erb' }”
-
同样的事情 - 确认渲染,但 js 未执行。 ?
-
使用 Startet 发送完整的日志条目...直到完成。否则很难发现问题。