Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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
Jquery 用Ajax结果填充剑道网格_Jquery_Asp.net Mvc_Asp.net Mvc 4_Kendo Ui_Kendo Grid - Fatal编程技术网

Jquery 用Ajax结果填充剑道网格

Jquery 用Ajax结果填充剑道网格,jquery,asp.net-mvc,asp.net-mvc-4,kendo-ui,kendo-grid,Jquery,Asp.net Mvc,Asp.net Mvc 4,Kendo Ui,Kendo Grid,我希望能够使用ajax调用的结果来决定我将填充哪个剑道网格。如果我只收到数组中的一个项目,我想填充一个网格,否则我有另一个网格来容纳多个项目 我的jQuery $.ajax({ type: "POST", dataType: "json", url: 'Item/GetItems/', data: { number: number }, success: function (data) {

我希望能够使用ajax调用的结果来决定我将填充哪个剑道网格。如果我只收到数组中的一个项目,我想填充一个网格,否则我有另一个网格来容纳多个项目

我的jQuery

    $.ajax({
        type: "POST",
        dataType: "json",
        url: 'Item/GetItems/',
        data: { number: number },
        success: function (data) {

            if (data.length == 1) {
                var sGrid = $("#SingleGrid").data("kendoGrid").dataSource.data(data);

                //I´ve also tried this
                //sGrid.refresh();
            }
            else {
                var mGrid = $("#MultipleGrid").data("kendoGrid").dataSource.data(data);

                //I´ve also tried this
                //mGrid .refresh();
            }
        },
        error: function () {
        }
    });
function TestGrid() {
    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {
                type: "POST",
                dataType: "json",
                url: 'Item/GetItems/'
            }
        },
        schema: {
            data: function (response) {
                // Here the Total is always correct
                return response.Total;
            }
        }
    });

    dataSource.fetch(function () {
        var kendoGrid;
        var data = this.data();
        //Here the data does not include my Total
        alert(data);
        if (data.length == 1) {
            kendoGrid = $("#SingleGrid").data("kendoGrid");
        } else {
            kendoGrid = $("#MultipleGrid").data("kendoGrid");
        }
        kendoGrid.setDataSource(dataSource);
        kendoGrid.refresh();
    });
}
我的控制器操作

    public ActionResult GetItems([DataSourceRequest] DataSourceRequest request, string number)
    {
        var items = _idg.GetItems(number);
        return Json(items.ToDataSourceResult(request, ModelState));
    }
function TestGrid() {
    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {
                type: "POST",
                dataType: "json",
                url: 'Item/GetItems/'
            }
        },
        schema: {
            data: function (response) {
                // Here the Total is always correct
                return response.Total;
            }
        }
    });

    dataSource.fetch(function () {
        var kendoGrid;
        var data = this.data();
        //Here the data does not include my Total
        alert(data);
        if (data.length == 1) {
            kendoGrid = $("#SingleGrid").data("kendoGrid");
        } else {
            kendoGrid = $("#MultipleGrid").data("kendoGrid");
        }
        kendoGrid.setDataSource(dataSource);
        kendoGrid.refresh();
    });
}
我一直在监视Firebug,它没有显示任何错误。我试图通过决定填充一个网格来阻止对服务器的第二次调用。有没有一种方法可以像这样强制数据源刷新客户端?(不调用数据源上的read函数,该函数将在第二次调用服务器)

编辑

function TestGrid() {
    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {
                type: "POST",
                dataType: "json",
                url: 'Item/GetItems/'
            }
        },
        schema: {
            data: function (response) {
                // Here the Total is always correct
                return response.Total;
            }
        }
    });

    dataSource.fetch(function () {
        var kendoGrid;
        var data = this.data();
        //Here the data does not include my Total
        alert(data);
        if (data.length == 1) {
            kendoGrid = $("#SingleGrid").data("kendoGrid");
        } else {
            kendoGrid = $("#MultipleGrid").data("kendoGrid");
        }
        kendoGrid.setDataSource(dataSource);
        kendoGrid.refresh();
    });
}

从我上面的例子来看,我似乎无法从这个.data()得到总数。当我调试Firebug时,我可以看到总数总是正确的。有什么想法吗?

您可以填充剑道数据源的新实例,加载数据,然后根据结果进行操作,设置网格的数据源。也许是这样的:

var dataSource = new kendo.data.DataSource({
  transport: {
    read:  {
      type: "POST",
      dataType: "json",
      url: 'Item/GetItems/',
      data: { number: number },
    }
  }
});
然后从服务器获取数据并对结果执行操作:

dataSource.fetch(function() {
  var data = this.data();
  var kendoGrid;
  if (data.length == 1) {
    kendoGrid = $("#SingleGrid").data("kendoGrid");
  } else {
    kendoGrid = $("#MultipleGrid").data("kendoGrid");
  }
  // Replace the grids data source with our new populated data source
  kendoGrid.setDataSource(dataSource);
  kendoGrid.refresh();
});

您可以填充剑道数据源的新实例,加载数据,然后对结果执行操作,设置网格的数据源。也许是这样的:

var dataSource = new kendo.data.DataSource({
  transport: {
    read:  {
      type: "POST",
      dataType: "json",
      url: 'Item/GetItems/',
      data: { number: number },
    }
  }
});
然后从服务器获取数据并对结果执行操作:

dataSource.fetch(function() {
  var data = this.data();
  var kendoGrid;
  if (data.length == 1) {
    kendoGrid = $("#SingleGrid").data("kendoGrid");
  } else {
    kendoGrid = $("#MultipleGrid").data("kendoGrid");
  }
  // Replace the grids data source with our new populated data source
  kendoGrid.setDataSource(dataSource);
  kendoGrid.refresh();
});

你也可以这样做

$("#grid").kendoGrid({
            dataSource: {
                transport: {
                    read: {
                        url: "http://localhost:13073/home/KendoGriddata",
                        dataType: "json",
                        type: "Post",
                        data: function () {
                            var dt = { MultipleSearchText: 'rikin' };
                            return dt;
                        }
                    }
                },
                pageSize: 5    
            });

你也可以这样做

$("#grid").kendoGrid({
            dataSource: {
                transport: {
                    read: {
                        url: "http://localhost:13073/home/KendoGriddata",
                        dataType: "json",
                        type: "Post",
                        data: function () {
                            var dt = { MultipleSearchText: 'rikin' };
                            return dt;
                        }
                    }
                },
                pageSize: 5    
            });

谢谢你的回答@boniestlawyer,我按照你的建议实现了,但是我的网格仍然没有显示数据。我可以在Firebug中看到数据正在从控制器传递,但没有出现。当我计算新数据源中的元素时(使用total()函数),我总是不接收任何元素,就好像数据源是空的一样。也许我使用了一个错误的函数来计算数据源,或者我填充数据源的方式不正确。有什么想法吗?:)我怀疑这可能与进入浏览器的数据有关。尝试向剑道数据源添加一个schema->data函数,如下所示:,并调试该函数以检查您得到的响应。这可能与您所建议的一样,来自服务器的数据以某种方式没有正确通过,或者至少没有正确地进行数据绑定。假设数据源总是以DataSourceResult的形式从控制器读取数据,对吗?(如我的示例所示)它似乎是正确的。kendo数据源的javascript端不一定要绑定到DataSourceResult,它可以从几乎所有的JSON数据中读取,它只是帮助处理数据,这样您就不需要在客户端执行太多的管道操作。现在我回到这个问题上来。如何计算数据源中的元素?在上面的示例中,您将使用什么来返回数据源的长度?感谢您的回答@boniestlawyer,我按照您的建议实现了,但是我的网格仍然没有显示数据。我可以在Firebug中看到数据正在从控制器传递,但没有出现。当我计算新数据源中的元素时(使用total()函数),我总是不接收任何元素,就好像数据源是空的一样。也许我使用了一个错误的函数来计算数据源,或者我填充数据源的方式不正确。有什么想法吗?:)我怀疑这可能与进入浏览器的数据有关。尝试向剑道数据源添加一个schema->data函数,如下所示:,并调试该函数以检查您得到的响应。这可能与您所建议的一样,来自服务器的数据以某种方式没有正确通过,或者至少没有正确地进行数据绑定。假设数据源总是以DataSourceResult的形式从控制器读取数据,对吗?(如我的示例所示)它似乎是正确的。kendo数据源的javascript端不一定要绑定到DataSourceResult,它可以从几乎所有的JSON数据中读取,它只是帮助处理数据,这样您就不需要在客户端执行太多的管道操作。现在我回到这个问题上来。如何计算数据源中的元素?在上面的示例中,您将使用什么来返回数据源的长度?