respond_to块中的Format.js不以条件格式工作

时间:2017-10-25 15:55:30

标签: javascript ruby-on-rails conditional

我有这个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"当用户点击链接以便存在参数时会触发吗?

1 个答案:

答案 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"
});