有没有办法在jsGrid上逐页加载json数据?

时间:2018-05-15 14:16:32

标签: javascript ajax jsgrid

我正在使用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();
}

正如您所见,我使用切片来获取要在该页面上显示的对象数组的一部分。

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

1 个答案:

答案 0 :(得分:0)

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。