Javascript jqueryajax关于Rails的帖子偏头痛

Javascript jqueryajax关于Rails的帖子偏头痛,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我正在运行一个JS游戏off file://并尝试向localhost Rails服务器发出post请求,以添加一个高分条目 JS: 控制器: def create @score = Score.new(params[:score]) if @score.save render :json => @score, :status => 201 else render :json => { :errors => @score

我正在运行一个JS游戏off file://并尝试向localhost Rails服务器发出post请求,以添加一个高分条目

JS:

控制器:

  def create
    @score = Score.new(params[:score])
    if @score.save
      render :json => @score, :status => 201
    else
      render :json => { :errors => @score.errors.full_messages }, :status => 422
    end
  end
  def set_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Expose-Headers'] = 'ETag'
    headers['Access-Control-Allow-Methods'] = 'GET, POST'
    headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match'
    headers['Access-Control-Max-Age'] = '86400'
  end

我得到一个状态为201的响应,数据库生成一个条目,但是当我在firebug中检查响应时,它显示为空,ajax请求的错误处理程序而不是成功处理程序被触发。我已经研究了十几个类似的问题,到目前为止,没有一个解决方案对我有效——我尝试在文本、html和json之间更改数据类型,结果相同。

这是一个CORS问题。我通过添加与Rails控制器类似的以下代码来解决此问题:

  def create
    @score = Score.new(params[:score])
    if @score.save
      render :json => @score, :status => 201
    else
      render :json => { :errors => @score.errors.full_messages }, :status => 422
    end
  end
  def set_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Expose-Headers'] = 'ETag'
    headers['Access-Control-Allow-Methods'] = 'GET, POST'
    headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match'
    headers['Access-Control-Max-Age'] = '86400'
  end

我不太清楚为什么这样做可以成功回调。AJAX是否需要在响应中使用这些头来启动成功回调?

何时发送请求?可以发布调用此
$.ajax
的整个js代码吗?你能删除状态部分并尝试一下吗?@H-man当状态被删除时,我得到了相同的结果,只需要一个200 OK的代码。回答是空白的。根据console.log的解释,响应对象是:readyState 0 responseText“”status 0 statusText“error”@Andrei我在按enter键后发送此请求,在该键上调用stopPropagate和preventDefault。我现在正在用完整的上下文更新我的问题。要检查的内容很少,
作为
score.rb上的
,在按键处理程序外部调用
submitScore
,在
create
操作中注释掉所有内容,并用空白的json响应。