我使用Rails 3.0.9和jQuery 1.6.2与jQuery-ujs。Rails 3.0.9未执行Ajax响应
基本上我想ajaxfy我的“添加到购物车”的行动。
笔者认为:
<td><%= button_to "Add to cart", line_items_path(:coupon_id => coupon, :format => :js), :remote => true %>
在我的控制器:
def create
@cart = current_cart
coupon = Coupon.find(params[:coupon_id])
@line_item = @cart.add_coupon(coupon.id)
respond_to do |format|
if @line_item.save
format.html { redirect_to(@line_item.cart) }
format.js {render :layout => false, :content_type => 'text/javascript'}
format.xml { render :xml => @line_item, :status => :created, :location => @line_item }
else
format.html { render :action => "new" }
format.js {render :layout => false, :content_type => 'text/javascript'}
format.xml { render :xml => @line_item.errors, :status => :unprocessable_entity }
end
end
末
我还创建了一个create.js.erb:
$("#my_cart").html("<%= escape_javascript(render(:partial => 'layouts/mycart')) %>");
更新购物车的物品编号,每当一个新的em被添加。
当我点击“加入购物车”按钮,JS POST请求被发送到服务器:
Started POST "/line_items.js?coupon_id=1" for 127.0.0.1 at Thu Aug 18 00:04:31 +0800 2011
Processing by LineItemsController#create as JS
,并从服务器的响应是:
Rendered layouts/_mycart.html.erb (5.3ms)
Rendered line_items/create.js.erb (28.9ms)
Completed 200 OK in 127ms (Views: 58.7ms | ActiveRecord: 3.0ms)
响应的身体包含更新我的购物车的javascript代码:
$("#my_cart").html("<li id=\"my_cart\"><a href=\"/carts/10\">My cart(1)<\/a>\n<\/li>");
但是,网页未更新。我尝试了不同的浏览器(Chrome,Firefox,Safari)。但是,如果我手动在Firebug的控制台中运行此代码,页面已更新。我搜索了一天,尝试了不同的解决方案。他们都没有工作过我。有人能解决我的问题吗?
下面是button_to生成的代码:
<form method="post" action="/line_items.js?coupon_id=1" data-remote="true" class="button_to"><div><input type="submit" value="Add to cart" /><input name="authenticity_token" type="hidden" value="MdHScf0JVNu2UFXLxuindDvZ5TPBztfMMzv57w1LWX8=" /></div></form>
你确定'#my_cart'存在吗?尝试使用简单的警报对其进行测试 – fl00r
您可以验证您的JavaScript文件是否正在执行?警报或东西....另外,你可以张贴由button_to erb生成的html吗? – voxobscuro
我以前试过alert()并得到了同样的结果:javascript从服务器返回,但没有被浏览器执行。我必须在Firebug的控制台中手动执行代码来触发警报框。 – SteveFan