Ruby on rails Rails正在呈现js.erb中的空部分
我试图从js.erb文件渲染部分,但视图中没有显示任何内容 有一个AJAX调用,当按下按钮时,它会在announcements\u控制器中触发report\u announcement操作 reports.jsRuby on rails Rails正在呈现js.erb中的空部分,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我试图从js.erb文件渲染部分,但视图中没有显示任何内容 有一个AJAX调用,当按下按钮时,它会在announcements\u控制器中触发report\u announcement操作 reports.js $.ajax({ type: "POST", contentType: "application/json", url: "/announcements/report_announcement.js", data: json_data }); reports/\u
$.ajax({
type: "POST",
contentType: "application/json",
url: "/announcements/report_announcement.js",
data: json_data
});
reports/\u report\u content.html.erb
<div id="report_announcements_container"></div>
公告/报告\u announcement.js.erb
我知道announcements/report_announcement.js.erb呈现正常,因为我可以在控制台和development.log中看到日志语句,以及正在记录到控制台的report_announcement对象
<% announcement_json = @announcement.to_json.html_safe %>
var report_announcement = <%= announcement_json %>;
console.log('report_announcement');
console.log(report_announcement);
// this is where something is not right I think
$("#report_announcements_container").html("<%= escape_javascript(render partial: 'announcements/report_announcements', locals: { announcement: @announcement }) %>");
console.log('inside announcements....');
var报告_公告=;
console.log(“报告公告”);
控制台日志(报告和公告);
//我想这是有问题的地方
$(“#报告#公告#容器”).html(“”);
console.log(“内部公告…”);
公告/报告_announcements.html.erb
这就是我遇到问题的地方,因为显示了分部的日志语句,但是页面上没有显示分部的任何内容。我在development.log中看到页面被呈现,但实际上视图中没有显示任何内容。该部分未显示在报告\u公告\u容器div的页面上
<h1>test</h1>
<%= announcement %>
<script>
console.log('inside partial...');
</script>
测试
log('内部部分…');
您在ajax调用中使用了错误的内容类型。Rails将application/javascript
和text/javascript
识别为:js
格式
此外,当您请求js
格式时,实际上必须执行返回的javascript,以便在客户端中发生任何事情
$.ajax({
type: "POST",
contentType: "application/javascript",
url: "/announcements/report_announcement.js",
data: json_data
}).done(function(data){
jQuery.globalEval(data); // Yeah eval is evil.
});
如果您在这之前做过任何“真正的”ajax调用,那么它将看起来完全是倒退的,因为它是js.erb
是一个可怜的javascript应用程序ajax框架,它由一组路由和视图组成,这些路由和视图改变了客户端中的DOM
$.ajax({
type: "POST",
contentType: "application/javascript",
url: "/announcements/report_announcement.js",
data: json_data
}).done(function(data){
jQuery.globalEval(data); // Yeah eval is evil.
});
手动创建对js.erb模板的调用只是Masocim中一个愚蠢的例外。如果您真的想使用它,请创建一个表单并使用它发送请求,这样您就可以利用rails提供的javascript处理程序:
<%= form_with(url: "/announcements/report_announcement", remote: true) do |f| %>
# ...
<% end %>
# ...