我正在使用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的一部分。
答案 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。