我正在使用Rails 3.0.9和jQuery 1.6.2和jQuery-ujs。
基本上我想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')) %>");
每当添加新项目时更新购物车项目编号。
当我点击“添加到购物车”按钮时,会向服务器发送一个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>
答案 0 :(得分:0)
就我所知,它看起来很不错。有些事我会尝试这样一个谜:尝试取出你的按钮url中的:format=>'js'
(我很确定rails知道它是为js格式化的)。而不是respond_to do |format|
块,尝试摆脱所有这些并使用respond_with(@line_item)
在控制器的顶部,请务必指定respond_to :js
。
我同意要求执行简单警报而不是使用escape_javascript渲染部分的评论。
如果仍然没有得到任何内容,请切换到link_to,看看是否可以获得任何结果。
答案 1 :(得分:0)
问题解决了!
我创建了一个具有相同设置的新项目,并尝试ajax在那里工作。令人惊讶的是,确实如此。所以我得出结论,我的项目中必定存在一些错误的设置。
我发现并从application_controller.rb
def set_charset
headers["Content-Type"] = "text/html; charset=utf-8"
end
def configure_charsets
response.headers["Content-Type"] = "text/html; charset=utf-8"
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
end
end
我从教程中复制了此代码以配置字符集。不知道为什么它搞砸了一切,但我现在可以继续我的项目了!