Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 元搜索&x2B;数据表_Ruby On Rails_Ruby_Ajax_Datatables_Meta Search - Fatal编程技术网

Ruby on rails 元搜索&x2B;数据表

Ruby on rails 元搜索&x2B;数据表,ruby-on-rails,ruby,ajax,datatables,meta-search,Ruby On Rails,Ruby,Ajax,Datatables,Meta Search,我在rails 3.1应用程序中使用datatables。Datatables设置为在服务器端工作。我使用ajax请求从服务器获取数据,然后将其显示在表中 我使用meta_搜索作为过滤器从数据库中获取数据 以下是我认为的代码: =simple\u form\u for@search,:url=>offer\u优惠券路径(@offer),:html=>{:method=>:get}do | f| =f.选择:已赎回_等于,[['所有优惠券','']+[[“已赎回”,正确],“未赎回”,错误]]

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

我使用meta_搜索作为过滤器从数据库中获取数据

以下是我认为的代码:

=simple\u form\u for@search,:url=>offer\u优惠券路径(@offer),:html=>{:method=>:get}do | f|
=f.选择:已赎回_等于,[['所有优惠券','']+[[“已赎回”,正确],“未赎回”,错误]]
以下是控制器中的方法:

def优惠券列表
search_params=params[:search]|{“meta_sort”=>“user_full_name.asc”}
@搜索=优惠券。搜索(搜索参数)
@优惠券=@search.includes(:user).includes(:order=>:gift).page(@page)
render:partial=>“优惠券/优惠券/优惠券列表”
终止
下面是负责向服务器发送ajax请求的javascript:

$(“#搜索#u兑换_等于”)。更改(函数(e){
table=$(“#网格”).dataTable();
var data=$(“#搜索_赎回_等于”).parents(“form:first”).serialize();
$.ajax({
“url”:“优惠券/优惠优惠券列表”,
“数据”:数据,
“type”:“POST”
});
表1.fnDraw();
e、 预防默认值();
});

问题是脚本向服务器发送两个ajax请求。第一个请求是正确的,并返回过滤后的数据。调用fnDraw()并返回未筛选的数据时,会发送另一个请求。因此,表中的数据不会更改。每次调用任何datatables函数时都会发送请求。如何解决这个问题?

我认为问题在于您正在事件处理程序中对表进行序列化,因此您调用了服务器两次

$("#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,我认为问题在于您正在事件处理程序中对表进行日化,因此需要调用服务器两次

$("#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即可