繁体   English   中英

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

[英]Why does rails not respond to the ajax post request with javascript?

我有一个带有click even处理程序的按钮:

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请求有关? 我搜索了博客,我似乎按照他们描述的方式做事,但我只是没有看到回应。

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.json ,而是format.js

JSON

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

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

-

回应

您可以从阅读Rails的respond_to机制以及一般的Internet上的不同mime类型中受益。

具体来说,如果要恢复纯数据(以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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM