Rails 6 Ajax请求不起作用,语法错误:预期表达式,get'<';汽车:1阿贾克斯在铁轨上坏了吗?
我在开发的一个应用程序中遇到了这个问题,我不知道为什么会出现错误,所以我创建了一个普通的测试应用程序,并使用Rails 6 Ajax请求不起作用,语法错误:预期表达式,get'<';汽车:1阿贾克斯在铁轨上坏了吗?,ajax,ruby-on-rails-6,Ajax,Ruby On Rails 6,我在开发的一个应用程序中遇到了这个问题,我不知道为什么会出现错误,所以我创建了一个普通的测试应用程序,并使用 rails g scaffold cars name 然后我在cars index.html.erb文件中添加了一个简单的div <div id="cars"> <p> Hello </p> </div> 到目前为止还不错。运行应用程序并使用cars链接会产生预期的错误,Rails日志告诉我它找不到需要渲染的视图。浏览器中没有控制台
rails g scaffold cars name
然后我在cars index.html.erb文件中添加了一个简单的div
<div id="cars">
<p> Hello </p>
</div>
到目前为止还不错。运行应用程序并使用cars链接会产生预期的错误,Rails日志告诉我它找不到需要渲染的视图。浏览器中没有控制台错误,因此一切都已连接并正常工作
因此,我用下面的代码创建了一个cars.js.erb模板,应该用“Boo”替换“Hello”,就像这样
car=document.getElementById(“cars”)
car.innerHTML=“”
这在我的浏览器(Firefox)中给了我一个控制台错误,
SyntaxError:expected expression,get'您看到的错误是由于将SJR模板命名为cars.js.erb
而不是index.js.erb
。默认情况下,index
操作呈现名为index
的模板。当Rails找不到index.js.erb
时,它会呈现index.html.erb
,这会在将其计算为JavaScript时导致语法错误
要解决此问题,您可以将cars.js.erb
重命名为index.js.erb
,也可以将format.js
调用更改为format.js{render“cars”}
另外,为了避免将来的麻烦,我应该指出,render(“Boo”)
不呈现单词“Boo”,而是尝试呈现名为“\u Boo”的部分模板
<p id="notice"><%= notice %></p>
<h1>Cars</h1>
<div id="cars">
<p> Hello </p>
</div>
<table>
<thead>
<tr>
<th>Name</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @cars.each do |car| %>
<tr>
<td><%= car.name %></td>
<td><%= link_to 'Show', car %></td>
<td><%= link_to 'Edit', edit_car_path(car) %></td>
<td><%= link_to 'Destroy', car, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Car', new_car_path %>
<!DOCTYPE html>
<html>
<head>
<title>Ajaxtest</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= link_to "Cars", cars_path, remote: true %>
<%= yield %>
</body>
</html>
def index
@cars = Car.all
respond_to do |format|
format.html
format.js
end
end
car = document.getElementById("cars")
car.innerHTML = "<%= j render("Boo") %>"