1
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控制器的顶部等)都不能像这样工作。

4

3 回答 3

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.
于 2011-11-20T14:39:00.203 回答
2

尝试在您的控制器和相应的形式中使用format.json而不是。format.js:remote => :true, :format => :json

不过,我不太确定是否format.jsonformat.js应该在这种情况下使用。由于 Rails 3 的默认脚手架生成控制器,format.json并且您正在做render :json的响应,我相信format.json这是正确的方法。并且format.js应该在你返回一段应该执行的 JS 时使用。

于 2011-11-20T12:58:20.803 回答
1

您请求的 URL 应以.json如下结尾:/controller/action.json

如果这是不可能的:

您应该在发送 ajax 请求时将'accepts'参数设置为。'application/json'

在这里搜索如何使用:http 'accepts': //api.jquery.com/jQuery.ajax/

在服务器端:

format.json { render :json => @user.errors, :status => :unprocessable_entity }
于 2011-11-20T14:12:29.583 回答