为什么rails没有用javascript响应ajax post请求?

时间:2014-07-24 04:44:56

标签: ruby-on-rails ruby-on-rails-3.2

我有一个带有点击偶数处理程序的按钮:

score_button_click_handler = (e) ->
$.ajax
      url: "/practice_scores/#{practice_score_id}.json",
      dataType: "json",
      type: "POST",
      contentType: "application/json",
      processData: false,
      data: "{ \"practice_score\": {\"score_id\": #{score_id}, \"practice_id\": #{practice_id} }}",
      beforeSend: (xhr) ->
        xhr.setRequestHeader("X-Http-Method-Override", "PUT");
      success: ->
        category_id = $("#category-practices").data("category-id")
        assessment_id = $("#viz").data("assessment-id")
        render_average assessment_id, category_id

practice_scores_controller.rb中,我有行动:

def update
    @practice_score = PracticeScore.find(params[:id])

    respond_to do |format|
      if @practice_score.update_attributes(params[:practice_score])
        format.html { redirect_to questionnaire_path, notice: 'Practice score was successfully updated.' }
        format.json {render "update.js.coffee.erb"}
      else
        format.html { render action: "edit" }
        format.json { render json: @practice_score.errors, status: :unprocessable_entity }
      end
    end
  end

app/views/practice_scores/update.js.coffee.erb。它中有一个简单的控制台日志声明。

我不能为我的生活获得更新视图来渲染。我还尝试了以下内容,看看是否可以让它做出回应。

format.json {render js: "alert('Something')"}

我没有在控制台中看到任何东西或弹出警报。最后,我想用coffee / js回复请求以更新我的UI。是否与POST请求有关?我浏览了博客,我似乎按照他们描述的方式做事,但我只是没有看到回应。

2 个答案:

答案 0 :(得分:2)

url: "/practice_scores/#{practice_score_id}.json",

从上面开始,你正在对.json端点进行ajax调用,这让我相信你想要json作为响应,但你不是。您可能需要常规网址/practice_scores/#{practice_score_id}

假设您已正确定义路线.......

我会测试render "update.js.coffee.erb"是否正在自行运行,删除整个respond_to do | format |块。

确定它有效后......

肯定没有format.jsonformat.js

答案 1 :(得分:1)

<强> JSON

要添加到Sherwyn Goh的答案,您需要了解JSON的用途 - 它是一个帮助您在应用程序中输出/使用数据的符号系统

如果您向应用程序提交JSON请求,则需要JSON编码的数据响应,是纯JS响应。如果您想要纯JS响应,只需将请求作为标准javascript发送

-

<强>的respond_to

您可以阅读Rails的respond_to机制以及Internet上的不同mime types

具体来说,如果您想要恢复纯数据(以JSON表示法),您需要发送json请求。如果您想要发生一项功能,您需要发送纯js请求:

#app/assets/javascripts/application.js
score_button_click_handler = (e) ->
$.ajax
  url: "/practice_scores/#{practice_score_id}"


#app/controllers/practice_scores_controller.rb
Class PracticeScoresController < ApplicationController
   def update
       ...
       respond_to do |format| 
          format.html
          format.js #-> renders /views/practice_scores/update.js.erb
       end
   end
end