Jquery 页面不显示rails中ajax调用后的更新信息

Jquery 页面不显示rails中ajax调用后的更新信息,jquery,ruby-on-rails,ajax,ruby-on-rails-3,unobtrusive-javascript,Jquery,Ruby On Rails,Ajax,Ruby On Rails 3,Unobtrusive Javascript,我有rails 3.1,当我使用ajax进行删除操作时,页面在没有手动刷新的情况下不会显示更新的内容 奇怪的是,所有的.js.erb代码似乎都正常启动。我甚至试着在destroy.js.erb中放一个简单的page.alert('hi'),但删除后我没有收到任何警报。我看到一些地方提到在视图中为ajax添加“script”标记以使jquery工作,但没有最新的教程提到这一点。我将感谢你的帮助 以下是我在服务器日志中看到的内容: Started DELETE "/categories/35" fo

我有rails 3.1,当我使用ajax进行删除操作时,页面在没有手动刷新的情况下不会显示更新的内容

奇怪的是,所有的.js.erb代码似乎都正常启动。我甚至试着在destroy.js.erb中放一个简单的page.alert('hi'),但删除后我没有收到任何警报。我看到一些地方提到在视图中为ajax添加“script”标记以使jquery工作,但没有最新的教程提到这一点。我将感谢你的帮助

以下是我在服务器日志中看到的内容:

Started DELETE "/categories/35" for 127.0.0.1 at 2011-12-19 12:58:15 -0500
  Processing by CategoriesController#destroy as JS
  Parameters: {"id"=>"35"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  Category Load (0.3ms)  SELECT "categories".* FROM "categories" WHERE "categories"."user_id" = 5 AND "categories"."id" = ? LIMIT 1  [["id", "35"]]
  SQL (0.5ms)  DELETE FROM "categories" WHERE "categories"."id" = ?  [["id", 35]]
Rendered categories/destroy.js.erb (0.5ms)
Completed 200 OK in 161ms (Views: 30.7ms | ActiveRecord: 3.2ms)
以下是我在生成的html页面输出页面源代码中看到的内容:

...
 <tr id = "category_35">
    <td>High-end products</td>
    <td class="deletebutton"><a href="/categories/35" data-confirm="Are you sure?" data-method="delete" data-remote="true" rel="nofollow">Delete</a></td>
  </tr>

 <tr id = "category_36">
    <td>Economy products</td>
    <td class="deletebutton"><a href="/categories/36" data-confirm="Are you sure?" data-method="delete" data-remote="true" rel="nofollow">Delete</a></td>
  </tr>
在类别_controller.rb中:

  def index
      @categories = current_user.categories.all
    respond_to do |format|
      format.html # index.html.erb
      format.json 
      format.js
    end
  end

  def destroy
      @category.destroy

    respond_to do |format|
        format.html { redirect_to categories_url }
        format.js { 
            render :template => 'categories/destroy.js.erb', :layout => false 
        }
    end
  end
在app/views/categories/index.html.erb中

<h2>Categories</h2>
<table name="categories_list">
<%= render "categories_list" %>
</table>    
<br />
类别

在部分_categories_list.html.erb中

<% @categories.each do |category| %>
  <tr id = "<%= dom_id(category)%>">
    <td><%= category.name %></td>

    <td class="deletebutton"><%= link_to 'Delete', category, confirm: 'Are you sure?', method: :delete, :remote => true  %></td>
  </tr>
<% end %>

正确%>

好的,为了防止有人无意中发现这个问题,我想与大家分享解决方案。有三件事很重要:

  • $sign-in destroy.js.erb丢失。以下是更正后的代码:

    $('#')。淡出(700)

  • 此外,必须指示控制器在响应.js时不要使用默认布局。这可以在应用程序控制器本身中完成。但我在类别控制器中做了如下操作:

    回应待办事项|格式| format.html{redirect_to categories_url} format.json format.js{render“destroy”,:layout=>false}

  • 此外,在迭代过程中,我曾一度混淆了format.json和format.js。他们是两个不同的东西!因为我是RoR新手,所以我认为对ajax调用的响应将是json,format.json类似于format。js

  • 最后,我要对Mark说一声,他在github上分享了一个ajax演示,网址是:


    我必须做的另一项更改是禁用布局格式副本。否则,该演示将是彻底的。我仍在研究如何处理js调用的错误条件。

    您的ajax调用看起来如何?我还没有编写任何单独的ajax调用代码。我用的是不引人注目的方法。如您所见,我将:remote=>true放在delete按钮上。这有用吗?@3nigma,我需要在application.js中添加任何设置代码吗?我看到一些老教程提到了ajax设置,但是我们需要最新的rails 3.1吗?我不了解rails,所以帮不了你
    <h2>Categories</h2>
    <table name="categories_list">
    <%= render "categories_list" %>
    </table>    
    <br />
    
    <% @categories.each do |category| %>
      <tr id = "<%= dom_id(category)%>">
        <td><%= category.name %></td>
    
        <td class="deletebutton"><%= link_to 'Delete', category, confirm: 'Are you sure?', method: :delete, :remote => true  %></td>
      </tr>
    <% end %>