2

我在我的 rails 3.1 应用程序中使用数据表。数据表设置为工作服务器端。我正在使用 ajax 请求从服务器获取数据,然后将其显示在表格中。

我使用 meta_search 作为过滤器从数据库中获取数据。

这是我认为的代码:

= simple_form_for @search, :url => offer_coupons_path(@offer), :html => {:method => :get} do |f|
= f.select :redeemed_equals,  [['All Coupons', '']] + [["Redeemed", true], ["Not Redeemed", false]]

这是控制器中的方法:

def offer_coupons_list
  search_params = params[:search] || {"meta_sort"=>"user_full_name.asc"}
  @search = Coupon.search(search_params)
  @coupons = @search.includes(:user).includes(:order => :gift).page(@page)
  render :partial => 'coupons/offer_coupons_list'
end

这是负责向服务器发送ajax请求的javascript:

$("#search_redeemed_equals").change(function(e){
    table = $("#grid").dataTable();
    var data = $("#search_redeemed_equals").parents("form:first").serialize();
    $.ajax({
        'url': 'coupons/offer_coupons_list',
        'data': data,
        'type': 'POST'
    });
    table.fnDraw();
    e.preventDefault();
});

问题是脚本向服务器发送了两个 ajax 请求。第一个请求是正确的并返回过滤后的数据。当调用 fnDraw() 并返回未过滤的数据时,将发送另一个请求。所以表中的数据没有变化。每次调用任何数据表函数时都会发送请求。我该如何解决这个问题?

4

1 回答 1

0

我认为问题在于您正在初始化事件处理程序中的表,因此您两次调用服务器。

$("#search_redeemed_equals").change(function(e){
    table = $("#grid").dataTable();//one call to the server and you use a global variable!
    var data = $("#search_redeemed_equals").parents("form:first").serialize();
    $.ajax({
        'url': 'coupons/offer_coupons_list',
        'data': data,
        'type': 'POST'
    });
    table.fnDraw();//second call
    e.preventDefault();
});

我认为你应该去掉初始化

var table = $("#grid").dataTable();

$("#search_redeemed_equals").change(function(e){
    table = $("#grid").dataTable();//one call to the server and you use a global variable!
    var data = $("#search_redeemed_equals").parents("form:first").serialize();
    $.ajax({
        'url': 'coupons/offer_coupons_list',
        'data': data,
        'type': 'POST'
    });
    table.fnDraw();//second call
    e.preventDefault();
});

如果您已经在页面的另一部分初始化表格,只需将表格分配给 javascript 变量并在该变量上调用 fnDraw

于 2011-11-25T11:52:48.650 回答