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

标签 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.__next 并重新运行 AJAX 查询的方向,但尝试理解这段 JavaScript 代码确实让我头晕。

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

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

最佳答案

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

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

  2. 使用$top=n参数根据$orderby$返回前n个条目跳过参数。

要翻阅结果,您只需更新 $skip token 并重新查询。

以下示例批量获取 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 deferreds 集成是另一回事。

我推荐你:

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

关于javascript - 转换 jQuery.ajax 代码以接受分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40911149/

相关文章:

javascript - 在 html 列表中查找第 n 个元素列表项的最佳方法?

javascript - 将 JSON 字符串发布到 JSP 时出现意外标记

javascript - 在 MongoDB 中查找包含字符串 ID 数组的文档

javascript - 在 React js 中传递多个 Prop 的最佳方法

javascript - 如何使用 antd-mask-input 库获取 antd 表单字段的原始值?

javascript - jQuery 获取上下文?

javascript - 替换javascript中的换行符

jquery ajax循环只返回最后一个值

java - Spring boot 中不呈现 Jsp View 页面。如何解决?

javascript - var dump formdata as POST 返回 NULL