我正在尝试采用在网站博客上找到的有关使用 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
字符串)以指定多少个分别要检索的项目和要跳过的项目数。
使用
$skip=n
参数根据$orderby
参数跳过前n
个条目使用
$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/