Jquery SharePoint 2010 REST:getJSON&附加在超过5000条记录的列表上
星期二快乐 我有个问题,我好像不能去上班了。我正在尝试使用REST查询一个包含5000多个项目的列表。我认为最好的方法是循环第一个05000,然后循环另一个>5000,然后附加我的结果,但我似乎无法让它工作。有人有这方面的经验吗Jquery SharePoint 2010 REST:getJSON&附加在超过5000条记录的列表上,jquery,json,ajax,sharepoint,sharepoint-2010,Jquery,Json,Ajax,Sharepoint,Sharepoint 2010,星期二快乐 我有个问题,我好像不能去上班了。我正在尝试使用REST查询一个包含5000多个项目的列表。我认为最好的方法是循环第一个05000,然后循环另一个>5000,然后附加我的结果,但我似乎无法让它工作。有人有这方面的经验吗 function fnResidences(choice) { $.getJSON("../_vti_bin/ListData.svc/Residences?$expand=Country&$select=Country/Country,*$fi
function fnResidences(choice) {
$.getJSON("../_vti_bin/ListData.svc/Residences?$expand=Country&$select=Country/Country,*$filter=(Id gt 0 and Id lt 5000) and (Country/Country eq '" + choice + "')", function (data) {
if (data.d.results == 0) {
$("#Residences-Table").html("N/A");
} else {
$("#Residences-Table").empty();
$.each(data.d.results, function (data) {
$("#Residences-Table").append("<tr><td>"+this.ResidenceName+"</td></tr>");
$.getJSON("../_vti_bin/ListData.svc/Residences?$expand=Country&$select=Country/Country,*$filter=(Id gt 5000) and (Country/Country eq '" + choice + "')", function (data) {
if (data.d.results == 0) {
$("#Residences-Table").html("N/A");
} else {
$("#Residences-Table").empty();
$.each(data.d.results, function (data) {
$("#Residences-Table").append("<tr><td>"+this.ResidenceName+"</td></tr>");
});
}
})
});
}
})
}
考虑使用分页。它归结为使用$top和$skip参数分别指定要检索的项目数和要跳过的项目数 您只需确保$orderby参数中使用的列已编制索引。也可以使用默认索引的ID字段 我已经使用递归成功地使用RESTAPI从一个超过5000项的列表中分页结果。下面示例中的递归getNextBatch函数每次调用最多可检索1000个项
var endpointUrl = "/_vti_bin/ListData.svc/ListName";
$.getJSON(
endpointUrl + "?$orderby=Id&$top=1000",
function(data){
processData(data); // you can do something with the results here
var count = data.d.results.length;
getNextBatch(count, processData, onComplete); // fetch next page
}
);
function getNextBatch(totalSoFar, processResults, onCompleteCallback){
$.getJSON(
endpointUrl + "?$orderby=Id&$skip="+totalSoFar+"&$top=1000",
function(data){
var count = data.d.results.length;
if(count > 0){
processResults(data); // do something with results
getNextBatch(totalSoFar+count, callback); // fetch next page
}else{
onCompleteCallback();
}
}
);
}
请注意,上述示例代码中不可见的是processData和onComplete方法,它们将分别用于处理一批结果,并在结果完全加载后执行任何最终任务。请考虑使用分页。它归结为使用$top和$skip参数分别指定要检索的项目数和要跳过的项目数 您只需确保$orderby参数中使用的列已编制索引。也可以使用默认索引的ID字段 我已经使用递归成功地使用RESTAPI从一个超过5000项的列表中分页结果。下面示例中的递归getNextBatch函数每次调用最多可检索1000个项
var endpointUrl = "/_vti_bin/ListData.svc/ListName";
$.getJSON(
endpointUrl + "?$orderby=Id&$top=1000",
function(data){
processData(data); // you can do something with the results here
var count = data.d.results.length;
getNextBatch(count, processData, onComplete); // fetch next page
}
);
function getNextBatch(totalSoFar, processResults, onCompleteCallback){
$.getJSON(
endpointUrl + "?$orderby=Id&$skip="+totalSoFar+"&$top=1000",
function(data){
var count = data.d.results.length;
if(count > 0){
processResults(data); // do something with results
getNextBatch(totalSoFar+count, callback); // fetch next page
}else{
onCompleteCallback();
}
}
);
}
请注意,上述示例代码中不可见的是processData和onComplete方法,它们将分别用于处理一批结果并在结果完全加载后执行任何最终任务。添加到Id gt 0和Id lt 5000中。添加到Id gt 0和Id lt 5000中。