【问题标题】:Ajax can't work in Rails 3.1Ajax 不能在 Rails 3.1 中工作
【发布时间】:2012-04-18 09:08:30
【问题描述】:

基于'Agile Web Development with Rails, Third Edition',我使用 Ajax 创建了一个购物车,但 Ajax 不适合我。我的代码如下:

/store/index.html.erb

<%= form_tag({:action=>'add_to_cart', :id=>product}, :remote=>true ) do %>
<%= submit_tag "Add to Cart" %>
<% end %>

/layouts/store.html.erb

<head>
...
<%= javascript_include_tag :defults %>
...
</head>

/controllers/store_controller.rb

def add_to_cart
...
respond_to do |format|
format.js
end
...
end

add_to_cart.js.rjs

page.replace_html("cart",:partial => "cart", :object=>@cart)

Rails 3.1,Ruby 1.9.3。

【问题讨论】:

    标签: ruby-on-rails ajax shopping-cart


    【解决方案1】:

    js 模板在 Rails 3 中被命名为 name.js.erb。

    让我假设您要在 ajax 调用中替换“购物车”div 并且您有 jQuery。 使用以下代码创建 add_to_cart.js.erb。

    $("#cart").replaceWith('<%=escape_javascript(render :partial => 'cart', :object=>@cart) %>');
    

    【讨论】:

    • escape_javascript 接受:partial:object 开始? :-) 我不喜欢现成的建议(用户应该考虑一下),但你似乎误导了作者,所以我更新了我的答案。
    • 这是一个错字,我在代码中错过了渲染。我已经更新了我的答案。
    • 根据 soundar 的建议,ajax 还没有工作。日志显示:Started POST "/store/add_to_cart/3" for ... ,StoreController#add_to_cart 处理为 HTML ...,完成 406 Not Acceptable
    • 谢谢你!根据您的代码,我修改了 store.html.erb,将 javascript_include_tag 从“:defaults”更改为“application”。 ajax 可以运行。但是有一个不能自动更新的问题,我必须刷新整个页面。你能给我建议吗?谢谢!
    • 您是否通过 ajax 获取响应 html?
    【解决方案2】:

    RJS 不再是 Rails 的一部分。您可以使用 jQuery 而无需任何额外下载:只是不要在末尾使用 .rjs。如果您知道 CoffeeScript,也可以在此处获得:将您的文件命名为 *.coffee,您就完成了。您也可以将其命名为 *.coffee.erb 以允许 ERb 预处理您的文件,但即使对于简单的 *.coffee-files,默认情况下也允许使用此功能。

    UPD:

    page.replace_html("cart",:partial => "cart", :object=>@cart)
    

    应该变成:

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

    【讨论】:

    • 按照soundar的建议可以运行。但是有一个问题:我必须刷新整个页面,然后才能显示购物车。
    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多