Kendo ui grid - 用ajax帖子过滤

时间:2016-02-04 15:45:35

标签: javascript kendo-ui kendo-grid

我正在尝试过滤我的数据源,但是使用ajax帖子,原因是,我在服务器端的主 GET上有条件,这样做:

WHERE idPai IS NULL OR idPai = 0

现在我想要的是在服务器端过滤datsource但没有那个条件,所以我首先要做的是:

       var value = $("#inputPastaFiltro").val();

        $.ajax({
        type: 'POST',
        url: "basedados.php",
        data: {dataFilter:value},
        dataType: "json",
        success: function(result) 
        {
           $('#gridBaseDados').data('kendoGrid').dataSource = new kendo.data.DataSource({ data: result.data[0] }).query({
            filter:{
              logic:"or",
              filters:[
                {field:"nome", operator:"contains",value:result.data[0].nome}]  
             }
          });
        },

在服务器端,我创建了一个:

else if($_POST['dataFilter'])

我有相同的GET,但没有我上面写的条件,这种方式(我认为)它搜索所有内容,但其余的逻辑不正确你已经意识到了。如果我这样做:

var value = $("#inputPastaFiltro").val();
dataSource.query({
                filter:{
                  logic:"or",
                  filters:[
                    {field:"nome", operator:"contains",value:value}]  
                 }
              });

它工作得非常好,并且一旦你在输入中插入单词,它也会动态搜索刷新网格(这很棒!)...但它基于我的MAIN GET具有这种条件

任何人都可以给我一些帮助吗?抱歉英文不好。

的问候。

1 个答案:

答案 0 :(得分:1)

使用数组result.data[0]创建数据源后,将对该数据执行过滤器。所以我认为你想要再次执行查询,当它执行过滤器时,对吧?当你使用kendo时,你调用ajax请求的方式并不好。你应该这样做:

$('#gridBaseDados').kendoGrid({
    ...
    dataSource: {
        transport: {
            read: function(options) {
                $.ajax({
                    ...
                    success: function(result) {
                        options.success(result.data[0]);
                    }
                });
            }
        }
    }
});

使用dataSource.transport.read中的函数是最好的方法。所以你有options参数,它具有dataSource的success回调。这将覆盖默认的dataSource请求,然后保留整个behiviour。您的过滤器应该按预期工作。每次更改时,他们都会调用read函数。

试一试并告诉我们结果。我希望它有所帮助。