【问题标题】:Rails 3.1 AJAX supported changes not reflected in browserRails 3.1 AJAX 支持的更改未反映在浏览器中
【发布时间】:2013-08-05 10:38:30
【问题描述】:

运行 Rails 3.1 Ruby 1.92

我正在尝试使用 AJAX 更新我的购物车。我的店面中有以下按钮来创建订单项

 <%= button_to " Buy ", line_items_path(product_id: product), remote: true, :class =>"blue-btn" %>

以下在我的 line_items 控制器中创建操作

def create
@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_url,notice: 'your item was added.' } 
 format.js { @current_item = @line_item }
 format.json { render json: @line_item,
 status: :created, location: @line_item }

最后,我在 app/views/line_items 目录中的 create.js.erb 模板中有以下 RJS 代码:

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

但是,当我将商品添加到购物车时,我必须刷新页面才能查看更新后的数量和总数。每次尝试将商品添加到购物车后,我都会检查服务器日志,并显示它呈现 line_items/create.js.erb 我已在下方包含完整日志,任何帮助将不胜感激

在 2013-08-04 14:01:26 -0400 为 127.0.0.1 开始 POST "/line_items?product_id=1" LineItemsController#create as JS 处理 参数:{"authenticity_token"=>"2TxUMUloihqhzGHlZrC9YKNPGNhfwZ070lEW64uL0SY=", "product_id"=>"1"} ←[1m←[35mCart Load (1.0ms)←[0m SELECT "carts".* FROM "carts" WHERE "carts"."id" = ?限制 1 [["id", 64]] ←[1m←[36mProduct Load (0.0ms)←[0m ←[1mSELECT "products".* FROM "products" WHERE "products"."id" = ?限制 1←[0m [[“id” , "1"]] ←[1m←[35mLineItem Load (0.0ms)←[0m SELECT "line_items".* FROM "line_items" WHERE "line_items"."cart_id" = 64 AND "line_ 项目"."product_id" = 1 限制 1 ←[1m←[36m (0.0ms)←[0m ←[1m开始交易←[0m ←[1m←[35mSQL (1.0ms)←[0m INSERT INTO "line_items" ("cart_id", "created_at", "order_id", "product_id", "quantity", "upda ted_at") 值 (?, ?, ?, ?, ?, ?) [["cart_id", 64], ["created_at", Sun, 2013 年 8 月 4 日 18:01:26 UTC +00:00], [" order_id", n il], ["product_id", 1], ["quantity", 1], ["updated_at", Sun, 2013 年 8 月 4 日 18:01:26 UTC +00:00]] ←[1m←[36m (103.3ms)←[0m ←[1m提交交易←[0m ←[1m←[35mLineItem Load (1.0ms)←[0m SELECT "line_items".* FROM "line_items" WHERE "line_items"."cart_id" = 64 ←[1m←[36mProduct Load (0.0ms)←[0m ←[1mSELECT "products".* FROM "products" WHERE "products"."id" = 2 LIMIT 1←[0m ←[1m←[35mProduct Load (0.0ms)←[0m SELECT "products".* FROM "products" WHERE "products"."id" = 1 LIMIT 1 渲染的购物车/_cart.html.erb (21.0ms) 渲染 line_items/create.js.erb (22.0ms) 在 136 毫秒内完成 200 次 OK(查看次数:26.0 毫秒 | ActiveRecord:106.3 毫秒)

【问题讨论】:

    标签: ruby-on-rails ajax


    【解决方案1】:

    我看不出你的代码有什么问题,但这是我的想法:

    • 我不确定您的 @cart.add_product(...) 方法的内部结构,代码看起来像是返回更新后的完整购物车对象(包含添加的产品),对吗?
    • 在浏览器中(使用 Firebug 或其他),您是否看到服务器向您发送应该插入的 HTML sn-p?

    【讨论】:

    • 不知道如何使用 firebug 来检查它你知道如何去做这件事的任何教程吗?
    【解决方案2】:

    返回并查看了 ajax 步骤,结果发现我调用了错误的 html 元素。解决了这个问题,现在可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2017-07-22
      • 2021-09-08
      • 1970-01-01
      相关资源
      最近更新 更多