Jquery SharePoint 2010 REST大型列表计数
这里有个简短的问题。因此,我尝试对列表项的数量进行REST计算,但列表一次最多只返回1000个条目。我想我找到了一个解决办法,但是我该如何把这两个结果相加呢Jquery SharePoint 2010 REST大型列表计数,jquery,rest,sharepoint,sharepoint-2010,Jquery,Rest,Sharepoint,Sharepoint 2010,这里有个简短的问题。因此,我尝试对列表项的数量进行REST计算,但列表一次最多只返回1000个条目。我想我找到了一个解决办法,但是我该如何把这两个结果相加呢 $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) { $("#ALLCount1").text(data.d.results.length); }) $.
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) {
$("#ALLCount1").text(data.d.results.length);
})
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) {
$("#ALLCount2").text(data.d.results.length);
})
要得到总数,您可以尝试以下方法:
var sum = 0;
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) {
sum = data.d.results.length;
$("#ALLCount1").text(sum);
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) {
sum += data.d.results.length;
$("#ALLCount2").text(sum);
})
})
尽管这有一些问题:
您可能想做的是分页。也就是说,继续发送请求,直到没有记录返回 要得到总数,您可以尝试以下方法:
var sum = 0;
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) {
sum = data.d.results.length;
$("#ALLCount1").text(sum);
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) {
sum += data.d.results.length;
$("#ALLCount2").text(sum);
})
})
尽管这有一些问题:
您可能想做的是分页。也就是说,继续发送请求,直到没有记录返回 项目总数 如果要查找列表本身中的项目总数(而不是筛选视图中的项目数),可以直接访问列表的
$count
属性
"/_vti_bin/ListData.svc/MPIC/$count"
这将返回项目计数
分页(如有必要)
要使用REST模拟分页,可以执行以下操作:
$orderby
参数,使用$skip=n
参数跳过第一个n
条目$orderby
和$skip
参数,使用$top=n
参数返回topn
条目李>
处理异步回调
代码中最大的问题是有两个异步函数回调,用于获取结果项的总和。由于这些函数调用不在同一范围内执行,因此不能同时访问它们的值
解决方法是使用函数链接将逻辑向前移动到回调函数中
使用$skip和$top的示例
下面是一个示例,在提供的代码中使用$skip
和$top
参数,在更新ALLCount1
元素的文本之前,使用递归回调函数获取结果总数
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
updateTotal(count);
});
function updateTotal(total){
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skip="+total+"&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
if(count > 0){
updateTotal(total+count);
}
else{
$("#ALLCount1").text(total);
}
});
}
使用$skiptoken和$top的示例
如果您被限制使用$skiptoken
而不是$skip
(例如在查询5000多个项目的列表时),您肯定仍然可以使用它,但您还有一些工作要做
$skip
只需要跳过的项目数,$skiptoken
需要跳过的最后一个项目的ID
代码基本上与上面的相同,但是您需要深入到数据结果中并提取最后一项的ID值。我将把它作为练习留给读者
updateTotal(0,0);
function updateTotal(skip,total){
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skiptoken="+skip+"&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
if(count > 0){
var lastItemId;
// TODO: get last item id from results here
updateTotal(lastItemId,total+count);
}
else{
$("#ALLCount1").text(total);
}
});
}
项目总数 如果要查找列表本身中的项目总数(而不是筛选视图中的项目数),可以直接访问列表的
$count
属性
"/_vti_bin/ListData.svc/MPIC/$count"
这将返回项目计数
分页(如有必要)
要使用REST模拟分页,可以执行以下操作:
$orderby
参数,使用$skip=n
参数跳过第一个n
条目$orderby
和$skip
参数,使用$top=n
参数返回topn
条目李>
处理异步回调
代码中最大的问题是有两个异步函数回调,用于获取结果项的总和。由于这些函数调用不在同一范围内执行,因此不能同时访问它们的值
解决方法是使用函数链接将逻辑向前移动到回调函数中
使用$skip和$top的示例
下面是一个示例,在提供的代码中使用$skip
和$top
参数,在更新ALLCount1
元素的文本之前,使用递归回调函数获取结果总数
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
updateTotal(count);
});
function updateTotal(total){
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skip="+total+"&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
if(count > 0){
updateTotal(total+count);
}
else{
$("#ALLCount1").text(total);
}
});
}
使用$skiptoken和$top的示例
如果您被限制使用$skiptoken
而不是$skip
(例如在查询5000多个项目的列表时),您肯定仍然可以使用它,但您还有一些工作要做
$skip
只需要跳过的项目数,$skiptoken
需要跳过的最后一个项目的ID
代码基本上与上面的相同,但是您需要深入到数据结果中并提取最后一项的ID值。我将把它作为练习留给读者
updateTotal(0,0);
function updateTotal(skip,total){
$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skiptoken="+skip+"&$top=1000&$inlinecount=allpages", function (data) {
var count = data.d.results.length;
if(count > 0){
var lastItemId;
// TODO: get last item id from results here
updateTotal(lastItemId,total+count);
}
else{
$("#ALLCount1").text(total);
}
});
}
所以当我看第一次计数时。它有一个从1016开始的下一个。我想是因为前16个文件被删除了,所以它被删除了。分页将如何工作?我发现一些评论提到了它,但没有具体说明如何执行。你仍然想将它限制在1000,除非你知道有多少一直被删除。最好将其限制为1000,让其返回984,并获得准确的计数。你应该开始了。它有一些需要修改的示例代码,但是如果您有问题,可以发布另一个问题。它有一个从1016开始的下一个。我想是因为前16个文件被删除了,所以它被删除了。分页将如何工作?我发现一些评论提到了它,但没有具体说明如何执行。你仍然想将它限制在1000,除非你知道有多少一直被删除。最好将其限制为1000,让其返回984,并获得准确的计数。你应该开始了。它有一些e