使用ajax请求在同一页面中显示部分内容

我是铁杆新手,我正在尝试为学校做一个简单的项目。

我已经按照以下方式生成了一个脚手架。

rails generate scaffold Book title:string content:text code:string 

我正在尝试做的是,当我点击一个链接时,在同一页面上显示一个div的书列表(localhost:3000 / books)。 我试图按照这个程序但它似乎不起作用,当我点击/ books页面末尾的链接时,页面上没有任何可见的渲染

这是我的books / index.html.erb

 

Books

Title Content Code




my books_controller的索引方法

 def index @books = Book.all respond_to do |format| format.html format.js end end 

_books偏

  

和books / index.js.erb

 $("#content").html(""); 

当我点击应该呈现部分的链接时,我在终端中得到了这个,并且页面上没有显示任何内容。

 Started GET "/books" for 127.0.0.1 at 2017-05-12 17:35:02 +0200 Processing by BooksController#index as JS Rendering books/index.js.erb Book Load (0.3ms) SELECT "books".* FROM "books" Rendered books/_books.html.erb (2.4ms) [cache miss] Rendered books/index.js.erb (3.9ms) Completed 200 OK in 8ms (Views: 6.0ms | ActiveRecord: 0.3ms) 

我想我错过了什么,但我真的无法弄清楚为什么。 有任何想法吗? 谢谢

PS:Rails版本:5.1.0和ruby 2.4.0

Rails 5.1没有依赖于jQuery。 这段代码:

 $('#content').html("<%= j (render 'books') %>"); 

是jQuery代码。 如果添加jquery-rails gem并按照文档进行操作,则代码应该可以正常工作。

我不确定你的代码问题出在哪里,但我可以建议,对我来说,这是一个更优雅的选择。 我建议将一个jquery onClick处理程序绑定到你的链接并让它对服务器执行一个ajax请求 – 要么是另一个视图,要么重新编码同一个视图 – 它发回一个包含你所有数据的json对象,ajax成功处理程序可以然后操纵页面内的html。 像这样的东西:

 $("#all_books_link").click(function() { $.ajax({ dataType: "json", url: , success:function(data) { for (var key in data) { $("#content").append("
"+data[key]+"
" } } }); });

您的服务器端rails函数应该返回一个json对象,而不是实际的HTML。