【问题标题】:Format.js in respond_to block doesn't work in an conditional formatrespond_to 块中的 Format.js 不适用于条件格式
【发布时间】:2018-04-06 19:29:51
【问题描述】:

我有这个 respond_to 块,如果存在参数,“format.js”将触发,否则“format.html”将触发。我的问题是,参数最初永远不会出现,只有在用户单击链接之前,才会触发 ajax 响应。

这里是块:

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”以显示参数?

【问题讨论】:

    标签: javascript ruby-on-rails conditional


    【解决方案1】:

    响应的格式由 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"
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      相关资源
      最近更新 更多