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

Javascript 转换jQuery.ajax代码以接受分页,javascript,jquery,ajax,sharepoint,Javascript,Jquery,Ajax,Sharepoint,我正在尝试使用我在一个网站的博客上找到的关于使用javascript和REST在SharePoint中创建图表的代码。原文可以在这里找到以供参考-,我已经试着向作者寻求帮助,但没有得到回应 "use strict"; var EngagementChartBuilder = window.EngagementChartBuilder || {}; //The module for executing a REST query EngagementChartBuilder.RESTQuery

我正在尝试使用我在一个网站的博客上找到的关于使用javascript和REST在SharePoint中创建图表的代码。原文可以在这里找到以供参考-,我已经试着向作者寻求帮助,但没有得到回应

"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个结果。我找到了一些文章/帖子,这些文章/帖子为我指明了在URL中使用data.d..\uu的方向,并重新运行AJAX查询,但试图理解这些JavaScript代码确实让我头晕目眩

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


任何帮助都将不胜感激。提前感谢。

您可以将
$top
$skip
参数添加到端点URL(在您的情况下,是
restUrl
字符串),以分别指定要检索的项目数和要跳过的项目数

  • 根据
    $orderby
    参数,使用
    $skip=n
    参数跳过第一个
    n
    条目

  • 根据
    $orderby
    $skip
    参数,使用
    $top=n
    参数返回top
    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行OData REST中不起作用

    SharePoint REST API响应中有一个名为“\uu next”的属性,可用于实现分页

    此链接包含“$skiptoken”,用于分页

    我认为你应该尝试以下方法:

  • 使用$filter-->

    /_api/web/Lists/GetByTitle(ListTitle)/items?$filter=Id gt{valueSkipFrom}&$top={ValueTop}

  • 使用“下一步”链接。这可以通过“response.d.\u next访问

    如果它有一个值,则它包含将返回下一组项目的url。如果为null,则表示您已到达结果集的末尾

  • 请参考此链接,该链接将指导您: