我有这个respond_to块,如果存在param," format.js"会开火或者#34; format.html"会发射。我的问题是这样,只有在用户点击链接然后触发ajax响应之前,params才会在最初出现。
以下是块:
respond_to do |format|
if params[:tab_id].present?
format.js
else
format.html
end
end
我发现这篇帖子:JQuery posting form via AJAX not triggering rails respond_to format.js这似乎是一个修复,但我不理解为什么它有效。有了我的问题," format.html"页面加载时将始终为第一个。我怎样才能解决这个问题,以便" format.js"当用户点击链接以便存在参数时会触发吗?
答案 0 :(得分:0)
响应的格式由Accept标头和请求路径上的格式(如.js或.html)确定。
format.js
仅在rails确定请求是针对JS时运行。 Rails默认为format.html
。尝试使用参数不是一个好的甚至可行的想法。
这些是MIME类型Rails recognize as js:
Mime::Type.register "text/javascript", :js, %w( application/javascript application/x-javascript )
要发送js的ajax请求,您需要这样做:
var promise = $.ajax('/somepath.js');
// or
var promise = $.ajax('/somepath', {
dataType: "text/javascript" // or just "script"
});