[英]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.