完成406在773ms不可接受

我的客户端应用程序将JSON编码的POST发送到rails服务器,但服务器显示406错误,并且不响应json。

UsersController创建

# POST /users # POST /users.json def create @user = User.new(params[:user]) respond_to do |format| if @user.save format.html { redirect_to @user, notice: 'User was successfully created.' } 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 

Rails控制台:

 Started POST "/users.json" for 127.0.0.1 at 2013-05-21 16:38:47 +0100 Processing by Devise::RegistrationsController#create as JSON Parameters: {"user"=>{"name"=>"", "available"=>"true", "email"=>"", "sex"=>"male", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}} WARNING: Can't verify CSRF token authenticity (0.2ms) begin transaction User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '' LIMIT 1 (0.2ms) rollback transaction Completed 406 Not Acceptable in 773ms (ActiveRecord: 6.1ms) 

谁能帮我?

如果有人看到它会稍后尝试回答这个问题。 我一遍又一遍地遇到这个问题,即使我的控制器底部只有JSON作为格式选项(在你的例子中也是如此):

 respond_to do |format| format.json { render json: @user, status: :created, location: @user } end 

即使在我的请求中使用$.getJSON显式调用它, $.getJSON使用JSON数据类型调用它。

我发现的技巧是在我的页面名称上用.json调用它。

  $.getJSON('controllername-your-calling.json?', function(json){ //do your stuff... }); 

也许它有助于某人。

您需要在控制器顶部添加respond_to :json, only: [:create] 。 您可能需要为采用HTML的操作添加respond_to :html