在这里快速提问。所以我正在尝试对有多少列表项进行REST计算,但该列表一次最多只返回1,000个条目。我想我有一个解决方法,但我如何才能添加两个结果呢?
$.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);
})
答案 0 :(得分:2)
总物品数
如果您要查找列表中的项目总数(而不是过滤视图中的项目数),您可以直接访问列表的$count
属性。
"/_vti_bin/ListData.svc/MPIC/$count"
这将返回项目计数。
分页(如有必要)
要使用REST模拟分页,您可以执行以下操作:
$skip=n
参数n
参数跳过第一个$orderby
条目
$top=n
参数根据n
和$orderby
参数返回热门$skip
条目。 处理异步回调
您的代码中最大的问题是您有两个异步函数回调,用于获取结果项的总和。由于这些函数调用不在同一范围内执行,因此您无法同时访问它们的值。
解决方法是使用函数链将逻辑转发到回调函数中。
使用$ skip和$ top
的示例以下是使用您提供的代码使用$skip
和$top
参数的示例,使用递归回调函数在更新{{1}的文本之前获取结果总数元素。
ALLCount1
使用$ skiptoken和$ top
的示例如果您被限制使用$.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
(例如查询5000多个项目的列表时),您肯定仍然可以使用它,但是您可以使用它还有一些工作要做。
$skip
只想要跳过的项目数,$skip
想要跳过最后一项的ID。
代码与上面的代码大致相同,但您需要深入了解数据结果并获取最后一项的ID值。我将此作为练习留给读者。
$skiptoken
答案 1 :(得分:0)
要获得总和,您可以尝试这样的事情:
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);
})
})
虽然这有一些问题:
你可能想做的是分页。也就是说,继续发送请求,直到没有返回任何记录。