2012-08-31 46 views
0

浏览器我这家伙Ajax请求不能看到效果,而刷新的Rails

我改变RJS到js.erb就像他所面临的same problem。我们都使用<%= button_to 'Add to Cart',line_items_path(:product_id => product) ,:remote=>true %>向控制器发送AJAX请求。 format.js罚款并执行create.js.erb。但购物车没有添加任何东西。

日志结果:

Rendered line_items/_line_item.html.erb (4.3ms) Rendered carts/_cart.html.erb (8.0ms) Rendered line_items/create.js.erb (8.8ms)

那是index.html.erb我们发送AJAX请求

<% if notice %> 
<p id="notice"><%= notice %></p> 
<% end %> 
<h1>Your Pragmatic Catalog</h1> 

<% @products.each do |product| %> 
<div class="entry"> 
<%= link_to image_tag(product.image_url), line_items_path(:product_id => product), html_options = {:method => :post} %> 
    <h3><%= product.title %></h3> 
    <%=sanitize product.description %> 
    <div class="price_line"> 
     <span class="price"><%= number_to_currency(product.price,:precision=>3) %></span> 
     <%= button_to 'Add to Cart',line_items_path(:product_id => product) ,:remote=>true %> 
    </div> 
    </div> 
<% end %> 

这就是line_items控制器功能来处理请求

# POST /line_items 
    # POST /line_items.json 
    def create 
    # for exercise only 
    session[:counter] = nil 

    @cart = current_cart 
    product = Product.find(params[:product_id]) 
    @line_item = @cart.add_product(product.id) 



    respond_to do |format| 
     if @line_item.save 
     format.html { redirect_to store_index_path } 
     format.js 
     format.json { render json: @line_item, status: :created, location: @line_item } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
     end 
    end 


    end 

create.js.erb

$('#cart').html("<%= escape_javascript(render(@cart)) %>"); 
+1

您需要添加更多信息。没有足够的信息可以帮助我们。 –

+0

您的视图文件夹中是否有'create.js.erb'文件?当您请求.js(AJAX)响应时,Rails需要知道应该向您回馈什么。 – Zajn

+0

我在里面有一个'create.js.erb'。问题似乎是,没有从'index.html.erb'发送到控制器的AJAX请求,所以'format'总是'format.html' – code4j

回答

4

我解决了这个问题。 感谢great article,它告诉我firebug能够从AJAX请求中查看响应的来源。 和JSLint可帮助我检出JavaScript语法。 最后我要感谢Firebug,它是一款非常棒的工具。

问题是,如果有任何语法错误,JavaScript不会被执行。

在我的问题:

我应该使用单引号代替双qouted包裹渲染结果。渲染结果与许多带有“”和“”的HTML一起出现,它们包装它们会导致javascript语法错误。 (双qouted在双qouated是不允许的)

所以我简单地改变$('#cart').html("<%= escape_javascript(render(@cart)) %>");$('#cart').html('<%= escape_javascript(render(@cart))%>');

我希望这个答案将帮助其他人谁也从这场恶梦员工受到影响。 帮助我提高速度的问题,如果这是可能的:)

1

让我们用Ĵ()辅助方法:$( '#车')的html( “<%= j的渲染(@cart)%>”) ;