大家好我想在我的rails应用程序中使用ajax: 这是我的routes.rb文件
ExampleAjax::Application.routes.draw do
root 'users#index'
resources :users
end
我的控制器文件
class UsersController < ApplicationController
def index
@users = User.all
@user = User.new
end
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.js {}
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
def user_params
params.require(:user).permit(:fname)
end
end
我的观看文件 index.html.erb
<b>Users</b>
<ul id="users">
<% @users.each do |user| %>
<%= render user %>
<% end %>
</ul>
<br>
<%= form_for(@user, remote: true) do |f| %>
<%= f.label :fname %><br>
<%= f.text_field :fname %>
<%= f.submit %>
<% end %>
new.html.erb
<%=form_for(@user, remote: true) do |f|%>
<p>
<%= f.label :fname %><br>
<%= f.text_field :fname %>
</p>
<p>
<%= f.label :lname %><br>
<%= f.text_field :lname %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
_user.html.erb
<li><%= user.fname %></li>
_create.js.erb
$("<%= escape_javascript(render @user) %>").appendTo("#users");
我的问题是当我点击创建用户时 我在控制台
中收到以下错误POST http://localhost:3000/users 500 (Internal Server Error)
答案 0 :(得分:1)
您的代码正在阻止此块:
format.js {}
其中没有定义任何内容,因此您的应用会尝试按照正常情况执行操作,即。渲染您所在行动的视图。
您处于创建操作中,格式为js,因此会尝试呈现create.js.erb
。
您应该重命名_create.js.erb
以删除下划线。
答案 1 :(得分:0)
<强>的Ajax 强>
我想在我的rails应用程序中使用ajax
为了向您提供有关Ajax的一些信息,它基本上已集成到您的应用程序中:
Ajax是一组相互关联的Web开发技术 客户端创建异步Web应用程序
这基本上是一种向您的网络应用发送asynchronous
请求的方式(通过javascript)。异步本质上意味着您发送的请求超出了典型HTTP“同步”请求结构的范围
HTTP
通过响应请求来工作。您执行的每次点击都会向您的服务器发送请求,该服务器会响应数据。 Synchronous
请求是您按顺序执行的请求,而异步“ajax”请求是独立发送的
<强>代码强>
您的问题是您没有create.js.erb
文件:
respond_to do |format|
format.html #-> action.html.erb
format.js #-> action.js.erb
end
除非您调用此块中的其他方法(例如render nothing
),否则Rails将在您的action.js.erb
目录中查找您的views
文件
<强>滑轨强>
Rails平等处理所有请求,并使用ActionDispatch::Http::MimeNegotiation类确定它是ajax
请求
这意味着您不必执行任何“特殊”操作来使用Ajax - 只需将请求发送到您的路由,然后使用respond_to do |format|