Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
呈现部分并使用jQuery传递集合_Jquery_Ruby On Rails_Ajax_Haml - Fatal编程技术网

呈现部分并使用jQuery传递集合

呈现部分并使用jQuery传递集合,jquery,ruby-on-rails,ajax,haml,Jquery,Ruby On Rails,Ajax,Haml,我正在尝试使用jQuery渲染部分。动作流是单击一个按钮,jquery对我的控制器进行AJAX调用,然后在响应时,它通过一个数组呈现部分内容。无论我怎么努力,我都无法做到这一点。我设置的html(即ruby)呈现为纯文本,而不是ruby。是的,我有一个_cart.html.haml文件 function updateCart( id ) { $.ajax({ url: '/items/add_item', data: {'id': id },

我正在尝试使用jQuery渲染部分。动作流是单击一个按钮,jquery对我的控制器进行AJAX调用,然后在响应时,它通过一个数组呈现部分内容。无论我怎么努力,我都无法做到这一点。我设置的html(即ruby)呈现为纯文本,而不是ruby。是的,我有一个_cart.html.haml文件

function updateCart( id ) {
    $.ajax({
        url: '/items/add_item',
        data: {'id': id },
        method: 'POST'})
    .done ( function ( data ) {
        var cart = data;
        var cart_items = data["cart_items"];
        var cart_total = data["cart_total"];
        $('#cart-wrapper')
        .html("#{ escape_javascript(render(partial: 'items/cart', collection: " + cart_items + ", as: 'cart_items')) }");
    });
}
提前感谢您的帮助

编辑: 添加了添加项方法

def add_item
  cart = session[:cart] || Cart.new
  cart.add_item(params[:id])
  respond_to do |format|
    format.json do
      Create an array from the search results.
      results = {
        cart_items: cart.cart_items,
        cart_total: cart.total
      }
      render json: results
    end
  end
  session[:cart] = cart
end

使用dataType:script选项,如下所示

function updateCart( id ) {
    $.ajax({
        url: '/items/add_item',
        data: {'id': id },
        method: 'POST',
        dataType: 'script'})
    });
<%- cart_items.each do |c| %>
  <%= c.name %>
<% end %>
Total : <%= cart_total %>
将此请求发送到控制器,从控制器执行以下操作

 def add_item
   your logic goes here ....
   @cart_items = ...
   @cart_total = ...
   respond_to do |format|
     format.js {}
   end
 end
然后在相应的视图文件夹中创建add_item.js.erb(我猜它在您的items视图文件夹中),然后在该文件中放置以下代码

item.js.erb

$('#cart-wrapper').html("<%= j(render(:partial => 'cart', :locals => {:cart_items => @cart_items, :cart_total => @cart_total}))
$('cart wrapper').html('cart',:locals=>{:cart\u items=>@cart\u items,:cart\u total=>@cart\u total}))
最后,在您的\u cart.html.erb部分中,执行所需的每个循环和代码,如下所示

function updateCart( id ) {
    $.ajax({
        url: '/items/add_item',
        data: {'id': id },
        method: 'POST',
        dataType: 'script'})
    });
<%- cart_items.each do |c| %>
  <%= c.name %>
<% end %>
Total : <%= cart_total %>

总数:

我已经更新了我的帖子。我没有使用js.erb文件,因此我不能按照你说的方式来做。如果我添加数据类型:“script”,它将永远不会调用.done回调。我想将数据作为json文件使用。如果你想使用json数据,为什么需要渲染部分(cart),如果您想使用json数据,可以使用jsonp和rails4提供的数据类型使用json构建器视图,也可以使用rabl进行json视图