Javascript 转换jQuery.ajax代码以接受分页
我正在尝试使用我在一个网站的博客上找到的关于使用javascript和REST在SharePoint中创建图表的代码。原文可以在这里找到以供参考-,我已经试着向作者寻求帮助,但没有得到回应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
"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
参数返回topn
条目$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延迟中封装的功能,以便有效地使用它们,或者
- 完全放弃延迟,只使用您自己的异步函数和回调,如文档示例中所示