【问题标题】:Rails form_tag remote: true processed as HTML (not */*) without 'data' hashRails form_tag 远程:true 处理为没有“数据”哈希的 HTML(不是 */*)
【发布时间】:2014-11-24 15:54:30
【问题描述】:

我有工作表单,它是使用 AJAX 提交的,并且被正确处理为“/”。这个有额外的确认数据哈希(并且需要在提交时确认)。 当我想要表单而不确认时,ale 看起来不错,但调用被视为 HTML 并且由于缺少模板而失败

一页一页的形式都在做他们的“事情”:

<h1>GOOD ajax call as */* looking for 'coupon_apply.js.erb'</h1>

        <%= form_tag(coupon_apply_path, method: :post, data: { confirm:  t('are_you_sure') }, id: 'apply-coupon', remote: true) do |f| %>
            <div class="clearfix">
              <label for="coupon"><%= t('coupon.coupon').capitalize %>:</label>
                <input type="text" name="coupon" id="coupon" value=""/>
              <button type="submit" value="Apply to your order" class="submit">
                <span><span><%= t('coupon.apply_order') %></span></span>
              </button>
            </div>
        <% end %>

<h1>BAD (maybe) ajax call as HTML looking for 'coupon_apply.html.erb'</h1>

        <%= form_tag(coupon_apply_path, method: :post, id: 'apply-coupon', remote: true) do |f| %>
            <div class="clearfix">
              <label for="coupon"><%= t('coupon.coupon').capitalize %>:</label>
               <input type="text" name="coupon" id="coupon" value=""/>
              <button type="submit" value="Apply to your order" class="submit">
                <span><span><%= t('coupon.apply_order') %></span></span>
              </button>
            </div>
        <% end %>

区别仅在于data: { confirm: t('are_you_sure') }, 的第一种形式。 两种形式都使用 data-remote="true" 渲染:

 <form accept-charset="UTF-8" action="/cs/kosik/aktivovat-slevovy-kupon" data-confirm="Jste si jistí?" data-remote="true" id="apply-coupon" method="post">
 => Started POST "/cs/kosik/aktivovat-slevovy-kupon" for 127.0.0.1 at 2014-11-24 16:38:40 +0100
 => Processing by CartController#coupon_apply as */*

 <form accept-charset="UTF-8" action="/cs/kosik/aktivovat-slevovy-kupon" data-remote="true" id="apply-coupon" method="post">
=> Started POST "/cs/kosik/aktivovat-slevovy-kupon" for 127.0.0.1 at 2014-11-24 16:39:28 +0100
=> Processing by CartController#coupon_apply as HTML

有什么想法吗?

【问题讨论】:

    标签: jquery ruby-on-rails ajax forms


    【解决方案1】:

    尝试在表单中添加格式:

     <%= form_tag(coupon_apply_path, format: :js ,method: :post, data: { confirm:  t('are_you_sure') }, id: 'apply-coupon', remote: true) do |f| %>
    

    【讨论】:

    • 我对带有“数据”哈希的表单没有任何问题。这个按预期工作。但是第二个(没有“数据”)没有。我试过form_tag(coupon_apply_path, format: :js, method: :post, id: 'apply-coupon', remote: true),但问题仍然存在=> Processing by CartController#coupon_apply as HTML
    • 如果我使用form_tag(coupon_apply_path(format: :js), method: :post, id: 'apply-coupon', remote: true),那么请求是Processing by CartController#coupon_apply as JS,但是(正确的)响应不会被评估为脚本并显示为文本('#coupon').replaceWith(...)
    • 如果我在原始页面(带表单)上从 JS 控制台执行返回的脚本,它会做它应该做的事情。所以JS响应没有错误。
    • 哈哈哈好像是个bug!我猜你可以向 rails repo 报告这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多