我注意到,在将REST调用使用到列表中时,SharePoint有100个项目的限制。我试图让它工作,所以它进行批次调用(即如果第一个电话是133项,做两个电话,所以第一个接收前100和第二个最后33)。从SharePoint(加载项)跨域获取超过100个承诺的列表项
这是我(编辑)代码:
this.getListItem = function ($scope, listName, url, SPHostUrl, SPAppWebUrl) {
return getListItem(listName, url, SPHostUrl, SPAppWebUrl).done(function(data) {
return data;
});
};
而且我对从SharePoint检索数据的功能。
function getListItem(listName, url, SPHostUrl, SPAppWebUrl) {
var deferred = $.Deferred();
var resultsArray = [];
var scriptbase = SPHostUrl + "/_layouts/15/";
jQuery.getScript(scriptbase + "SP.RequestExecutor.js", getOrderDetails);
function getOrderDetails() {
var executor = new SP.RequestExecutor(SPAppWebUrl);
executor.executeAsync(
{
url: url,
method: "GET",
dataType: "json",
headers: {
Accept: "application/json;odata=verbose"
},
success: function (data) {
var response = JSON.parse(data.body);
resultsArray.push(response.d.results);
if (response.d.__next) {
url = response.d.__next;
getOrderDetails(); <- Runs multiple times if __next is true
}
deferred.resolve(resultsArray)
},
error: function (data, errorCode, errorMessage) {
alert(errorMessage);
}
}
);
}
return deferred.promise();
}
此作品(它得到两个调用的所有列表项,首先对100和第二最后的33),但如我所料不返回数据。我用诺言错了吗?或者是在服务调用中破坏它?
编辑:代码工作正常。有一件事是我没有正确处理resultsArray.push()。需要循环的结果数组,而不是直接将其推(只返回了两个指标,因为在这两个电话的现在,它会返回133):
$.each(response.d.results, function (index, item) {
resultsArray.push(item);
});
感谢您指出了这一点。查看我的编辑解决方案。 – Robin