javascript - AJAX 调用正在处理但未在 Rails View 中呈现

标签 javascript ruby-on-rails ajax

在 Rails 4.2 应用程序中,div 列出并呈现现有的 caritems

  <div id='yield_cartitem'>
    <%= render 'cartitems' %>
  </div>

同一页面有表单(每个列出的产品一个)。

<%= form_for(@cartitem, remote: true, id: 'data-js-cartitem-form', data: {'js-cartitem-form' => true}) do |f| %>

  <%= f.hidden_field :product_id, value: product.id %>
  <%= f.hidden_field :price, value: product.price %>
  <%= f.submit 'Add to cart' %>
<% end %>

该类的 javascript 通过 jQuery 定义

$(document).on('turbolinks:load', function() {
  $('[data-js-cartitem-form]').on("ajax:success", function(event, data, status, xhr){
    var cartitem = $(xhr.responseText).hide();
    $('#cartitems').append(cartitem);
    cartitem.fadeIn(1000);
    document.getElementById('data-js-cartitem-form').reset();
  });

  $('#cartitems').on("ajax:success", function(event, data, status, xhr){
    var cartitem_id = xhr.responseJSON.id;
    $('[data-js-cartitem-id=' + cartitem + ']').hide();
  });    
});

Controller 创建操作按设计运行,并使用以下渲染指令。

  if @cartitem.save
    render partial: 'cartitem', locals: {cartitem: @cartitem}
  end

_cartitems.html.erb

<div id=cartitems class='tableize'>
  <%= render partial: 'cartitem', collection: @cartitems %>
</div>

同时_cartitem.html.erb定义

<div class='row' data-js-cartitem-id=<%= cartitem.id %>>
 <%= cartitem.quantity %>
 <%= cartitem.um %>
 <%= cartitem.product.try(:name) %>
 <%= cartitem.price %>
</div>

_cartitem.js.erb来电 $("div#yield_cartitem").html('< %=j (render 'cartitem') %>');

XHR 响应有效负载正在返回 $("div#yield_cartitem").html('< %=j (render 'cartitem') %>');但新创建的 caritem 并未刷新 div。

哪里出了问题?

更新

尝试通过将 _cartitems.js.erb 更改为警报来简化问题:

alert("<%= cartitem.quantity %> <%=j cartitem.um %> <%=j cartitem.product.try(:name) %> <%= number_to_currency(cartitem.price) %> Added")

警报确实有效呈现。

alert("1.0 kg Prod 1,89 € Added")

最佳答案

我可能是错的,但我注意到在 Controller 中您将本地变量传递给 cartitem html 部分但不在 js.erb 中文件。所以在 cartitem.js.erb 中这样做文件:

$("div#yield_cartitem").html('< %=j (render 'cartitem', cartitem: cartitem) %>');

真的很难调试js.erb文件,但这是可能的。尝试使用 gem pry查看部分内部的上下文和变量。

$("div#yield_cartitem").html('<%= binding.pry; j(render 'cartitem', cartitem: cartitem) %>');

关于javascript - AJAX 调用正在处理但未在 Rails View 中呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60681565/

相关文章:

javascript - 如何在 highcharts 中加载外部 json 数据以显示条形图

ruby-on-rails - 查询按关联表列排序的结果,仅限最近的关联

mysql - rails + SQL : include join table when no join

ruby-on-rails - 我怎样才能得到每个月的第 15 天和最后一天?

javascript - 无法从静态方法运行 Javascript

javascript - 根据预设 "div"和 "width"的内容动态更改 "height"的高度

javascript - jQuery AJAX php 'post' 返回实际的 PHP 代码

javascript - 如何使用 javascript 安全地实现 fb 登录

javascript - 我如何计算 javascript 正则表达式的内部?

javascript - 在插入 HTML 的 JavaScript 中打开窗口