SharePoint 2010 REST大型列表计数

时间:2016-06-17 17:54:35

标签: jquery rest sharepoint sharepoint-2010

在这里快速提问。所以我正在尝试对有多少列表项进行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);
    })

2 个答案:

答案 0 :(得分:2)

总物品数

如果您要查找列表中的项目总数(而不是过滤视图中的项目数),您可以直接访问列表的$count属性。

"/_vti_bin/ListData.svc/MPIC/$count"

这将返回项目计数。

分页(如有必要)

要使用REST模拟分页,您可以执行以下操作:

  1. 根据$skip=n参数
  2. 使用n参数跳过第一个$orderby条目
  3. 使用$top=n参数根据n$orderby参数返回热门$skip条目。
  4. 处理异步回调

    您的代码中最大的问题是您有两个异步函数回调,用于获取结果项的总和。由于这些函数调用不在同一范围内执行,因此您无法同时访问它们的值。

    解决方法是使用函数链将逻辑转发到回调函数中。

    使用$ 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);
    })  
})

虽然这有一些问题:

  1. 首先,你为什么要跳到1016?你不想要1001吗?
  2. 这里只有两个电话。你如何计划检索记录2001?
  3. 你可能想做的是分页。也就是说,继续发送请求,直到没有返回任何记录。