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

时间:2016-12-01 12:51:04

标签: javascript jquery ajax sharepoint

我尝试使用我在网站上发现的有关使用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个结果。我发现文章/帖子指出了我在URL下面使用data.d .__并重新运行AJAX查询的方向,但是试图理解这个JavaScript代码真的让我头晕目眩。

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

任何帮助都会非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

  1. 根据$skip=n参数

  2. 使用n参数跳过第一个$orderby条目
  3. 使用$top=n参数根据n$orderby参数返回热门$skip条目。

  4. 要翻阅结果,您只需更新$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延迟中封装的功能,以便您可以有效地使用它们,或者
    • 完全放弃延迟,只使用自己的异步函数和回调,如文档示例所示

答案 1 :(得分:0)

$ skip在SharePoint 2013 / SharePoint系列OData REST 中无效。

SharePoint REST API响应中有一个名为“ __ next ”的属性,您可以使用该属性来实现分页。

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

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

  1. 使用$ filter - >

    / _ api / web / Lists / GetByTitle( ListTitle )/ items?$ filter = Id gt {{strong> valueSkipFrom }&amp; $ top = { ValueTop < /强>}

  2. 使用“ __ next ”链接。这可以通过“ response.d .__ next

    进行访问

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

  3. 请参阅以下链接:https://sharepoint.stackexchange.com/questions/74777/list-api-get-all-items-limited-to-100-rows