Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails正在呈现js.erb中的空部分_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails正在呈现js.erb中的空部分

Ruby 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

我试图从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 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 %>

# ...