我有一个带有点击偶数处理程序的按钮:
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请求有关?我浏览了博客,我似乎按照他们描述的方式做事,但我只是没有看到回应。
答案 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.json
,format.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