转换jQuery.ajax代码以接受分页



我正在尝试在网站的博客上找到有关使用JavaScript和REST在SharePoint中创建图表的代码。原始文章可以在此处找到参考 - http://www.cardinalsolutions.com/blog/2013/05/building_charts_ins-我已经尝试与作者联系,请寻求帮助,但我还没有得到帮助响应。

"use strict";
var EngagementChartBuilder = window.EngagementChartBuilder || {};
//The module for executing a REST query
EngagementChartBuilder.RESTQuery = function (listTitle, query) {
    var execute = function (listTitle, query) {
        var restUrl = _spPageContextInfo.webServerRelativeUrl +
            "/_api/web/lists/getByTitle('" + listTitle + "')/items";
        if (query != "") {
            restUrl = restUrl + "?" + query;
        }
        var deferred = $.ajax({
            url: restUrl,
            type: "GET",
            headers: {
                "accept": "application/json;odata=verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").val()
            }
        });
        return deferred.promise()
    };
    return {
        execute: execute
    }
}();

但是,当该代码执行时,由于SharePoint的分页,它仅返回前100个结果。我发现了我指向使用数据的方向的文章/帖子。

我以为我可以做一个循环,但我真的没有取得任何进展。

任何帮助都将不胜感激。预先感谢。

您可以将$top$skip参数添加到您的端点URL(在您的情况下为restUrl字符串),以指定要检索多少个项目以及要跳过多少个项目。

>
  1. 使用$skip=n参数根据$orderby参数跳过第一个n条目

  2. 使用$top=n参数根据$orderby$skip参数返回顶部n条目。

要通过结果页面,您只需要更新$skip代币并需要。

以下示例以1000的批量获取项目:

 var endpointUrl = "/_api/lists('guid')/items"; 
$.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();
            }
        }
    );
}

将该概念与jQuery延期集成是另一回事。

我推荐您:

  • 花一些时间来了解jQuery延期中封装的功能,以便您可以有效地使用它们或
  • 放弃完全递延,只使用您自己的异步功能带有回调,如文档示例

$ skip在SharePoint 2013/SharePoint Line odata REST 中不起作用。

SharePoint REST API响应中有一个属性,名为" __ Next ",您可以用来实现分页。

此链接包含" $ skiptoken ",这对于分页很有用。

我认为您应该尝试实现以下方式:

  1. 使用$ filter->

    /_ api/web/lists/getByTitle( listTitle )/项目?$ filter = id GT { dureatskipfrom }/strong>}

  2. 使用" __ Next "链接。可以将其访问为" response.d .__ Next "

    如果它具有值,则包含将返回下一组项目的URL。如果是空的,则您已经达到了结果集的结尾

请参阅将指导您的链接:https://sharepoint.stackexchange.com/questions/74777/list-api-get-get-all-items-limited-to-100-rows

最新更新