【问题标题】:Search, Sort with AJAX使用 AJAX 搜索、排序
【发布时间】:2011-08-26 07:43:31
【问题描述】:

我已经复制了 RailsCasts 集 240 中的代码。我不知道为什么使用此代码 Ajax 请求不起作用。搜索功能可与普通方法(重新加载页面)一起工作,遗憾的是不能通过 Ajax。排序功能根本不起作用。

我已包含以下 JavaScript 库:

  • application.js
  • jQuery JavaScript 库 v1.6.2
  • jQuery UI 1.8.15
  • jQuery.rails.js
  • jQuery TinySort v1.1.0

如果您需要更多信息,请告诉我。我真的希望你能帮我解决问题。

users_controller.rb

def index
  @users = User.search(params[:search]).order(sort_column + " " + sort_direction)

  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @users }
  end
end

def sort_column
  User.column_names.include?(params[:sort]) ? params[:sort] : "lastname"
end

def sort_direction
  %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end

index.html.erb

<h1>Listing users</h1>

<%= form_tag users_path, :method => 'get', :id => "users_search" do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
  <div id="users">
    <%= render 'users' %>
  </div>
<% end %>

_users.html.erb

<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<table class="pretty">
  <tr>
    <th><%= sortable "Last name" %></th>
    <th><%= sortable "First name" %></th>
  </tr>
  <% for user in @users %>
    <tr>
      <td><%= user.lastname %></td>
      <td><%= user.firstname %></td>
    </tr>
  <% end %>
</table>

index.js.erb

$("#users").html("<%= escape_javascript(render("users")) %>");

users_helper.rb

def sortable(column, title = nil)
  title ||= column.titleize
  css_class = column == sort_column ? "current #{sort_direction}" : nil
  direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
  link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
end

application.js

$(function() {
  $("#users th a").live("click", function() {
    $.getScript(this.href);
    return false;
  });
  $("#users_search input").keyup(function() {
    $.get($("#users_search").attr("action"), $("#users_search").serialize(), null,     "script");
    return false;
  });
});

感谢您的帮助!

【问题讨论】:

    标签: ajax ruby-on-rails-3 search sorting jquery


    【解决方案1】:

    要使上述代码正常工作,您必须删除以下代码行。

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @users }
    end
    

    现在可以了。 :-)

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2018-01-28
      • 2023-03-20
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2013-03-06
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多