我正在使用jsgrid
我正在尝试将5000个注册表JSON放入网格中,但要逐页加载。例如,我不想一次读取所有5000个注册表,我将网格设置为按页面显示50个注册表,并且只想根据需要获取注册表。
此刻,我正在分页网格,但它总是读取所有json。这是我的控制器代码:

controller: {
loadData: function(filter) {
  var def = $.Deferred();
  $.ajax({
    url: "http://www.json-generator.com/api/json/get/clGvbnRZmG?indent=2", //5000
    //url: "http://www.json-generator.com/api/json/get/cpERCWvHzC?indent=2", //5
    dataType: "json",
    data: filter
  }).done(function(response) {
    var startIndex = (filter.pageIndex - 1) * filter.pageSize;
    var filteredArray = response;

    //if filter is passed
    if (filter.name !== "") {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.name.includes(filter.name);
      });
    } if (filter.age !== undefined) {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.age === filter.age;
      });
    } if (filter.email !== "") {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.email.includes(filter.email);
      });
    } if (filter.gender !== "") {
      filteredArray= $.grep(filteredArray, function(item) {
        return item.gender === filter.gender;
      });
    }

    //if sorting is passed
    if (filter.hasOwnProperty("sortField")) {
      if (filter.sortOrder === "asc") filteredArray.sort(ascPredicateBy(filter.sortField));
      else filteredArray.sort(descPredicateBy(filter.sortField));
    }
    var da = {
      data: filteredArray.slice(startIndex, startIndex + filter.pageSize),
      itemsCount: filteredArray.length
    };
    def.resolve(da);
  });

  return def.promise();
}


如您所知,我使用slice来获取对象数组的一部分以显示在该页面上。

可能吗?我不知道它只是关于jsgrid还是关于AJAX。我猜想使用AJAX不可能仅返回JSON的一部分。

最佳答案

jsGrid用于处理分页,您可以在promise中删除那段代码!

要让jsGrid处理分页,请设置以下内容:

paging: true,
pageLoading: true,
pageSize: 50,


然后,您的loadData控制器将在filter参数中传递以下属性:


pageSize-除上一页外,每页应返回的记录数。
pageIndex-5,000条记录的第n页。当用户单击网格上的>或>>链接或页码链接时,这由jsGrid确定。


您需要提供合适的Web服务来使用这两个参数来返回正确的数据页。例如,可能类似于以下内容:

url: "/api/json/get/clGvbnRZmG/" + filter.pageSize + "/" + filter.pageIndex


并且返回的数据必须采用以下形式:

{
  data: [ { ..first item ...}, { ..second item..}, ...],
  itemsCount: n
}


其中itemsCount是记录的总数,即5000。

08-06 13:07