Jquery SharePoint 2010 REST大型列表计数

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

这里有个简短的问题。因此,我尝试对列表项的数量进行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&$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);
    })  
})
尽管这有一些问题:

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

    要得到总数,您可以尝试以下方法:

    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);
        })  
    })
    
    尽管这有一些问题:

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

    项目总数

    如果要查找列表本身中的项目总数(而不是筛选视图中的项目数),可以直接访问列表的
    $count
    属性

    "/_vti_bin/ListData.svc/MPIC/$count"
    
    这将返回项目计数

    分页(如有必要)

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

  • 根据
    $orderby
    参数,使用
    $skip=n
    参数跳过第一个
    n
    条目
  • 根据
    $orderby
    $skip
    参数,使用
    $top=n
    参数返回top
    n
    条目 处理异步回调

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

    解决方法是使用函数链接将逻辑向前移动到回调函数中

    使用$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
    参数返回top
    n
    条目 处理异步回调

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

    解决方法是使用函数链接将逻辑向前移动到回调函数中

    使用$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