respond_to do |format|
if @user.save
format.js { render :nothing => true, :status => :ok, :location => @user }
else
format.js { render :json => @user.errors, :status => :unprocessable_entity }
end
end
我尝试过的所有选项(比如将respond_to :js
放在控制器的顶部等)都不像以前那样工作。
答案 0 :(得分:4)
Rails 3格式:
使用 respond_to :json和 respond_with (@ user)
respond_to :json # You can also add , :html, :xml etc.
def create
@user= User.new(params[:user])
#---For html flash
#if @user.save
# flash[:notice] = "Successfully created user."
#end
respond_with(@user)
end
# Also, add :remote => :true, :format => :json to the form.
答案 1 :(得分:2)
尝试在控制器中使用format.json
代替format.js
,并在相应的表单中使用:remote => :true, :format => :json
。
尽管如此,我不太确定在这种情况下是应该使用format.json
还是format.js
。由于Rails 3的默认脚手架生成带有format.json
的控制器而您正在做render :json
作为响应我相信format.json
是正确的方法。当你返回一块应该执行的JS时,应该使用format.js
。
答案 2 :(得分:1)
您请求的网址应以.json
结尾,如下所示:/controller/action.json
如果不可能:
发送ajax请求时,您应将'accepts'
参数设置为'application/json'
。
在此处搜索'accepts'
的使用方式:http://api.jquery.com/jQuery.ajax/
在服务器端:
format.json { render :json => @user.errors, :status => :unprocessable_entity }