标题非常准确地说明了我的问题。如果我尝试使用sharepoint的REST API从列表中收集所有400多个项目,我只会获得前100个。
我已阅读http://msdn.microsoft.com/en-us/library/office/dn292552(v=office.15).aspx并使用REST""使用REST"部分,他们说明了
以下示例显示如何检索列表项的所有。
url: http://site url/_api/web/lists/GetByTitle(‘Test')/items
method: GET
headers: ...
我突出了所有的字眼,因为那不是我得到的......
我错过了什么吗?是否有一些选项我应该禁用/启用以获取真正的所有项目?
由于
答案 0 :(得分:25)
限制是由服务器端分页引起的。
解决方法是一次检索100个项目,或通过输入项目数来覆盖限制:
https://$DOMAIN/$SITE/_api/web/Lists/getByTitle('$LIST')/Items?$top=1000
请注意,还有一个阈值为5000。
答案 1 :(得分:2)
你可以使用RowLimit& RowsPerPage在休息电话中。以下是示例
$.ajax({
url: siteurl + "/_api/web/lists/getbytitle('NewList')/items",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
RowLimit : null, //Specify the row limit
RowsPerPage : null, //Specify no of rows in a page
success: function (data) {
$('#oDataFilter').append("<table>");
$.each(data.d.results, function(index, item){
$('#oDataFilter').append("<tr><td class="+styleClass+">" + item.ID + "</td><td class="+styleClass+">"+ item.Title + "</td></tr>");
});
$('#oDataFilter').append("</table>");
},
error: function (error) {
alert('Error getListItems :: '+JSON.stringify(error));
}
答案 2 :(得分:2)
添加到Christophe's回答我会说列出列表中的所有(可能是5000个)项目并解析它们会导致性能问题。
如果您查询sharepoint以显示特定列表中的所有项目,则只打印出前100个。但xml响应还提供了查询下100个列表项的URL。
在xml响应的最后,你会看到一个像这样的标签
<link rel="next" href="https://xxxxx.sharepoint.com/_api/web/lists/GetByTitle('list')/items?%24skiptoken=Paged%3dTRUE%26p_ID%3d100" />
href="...."
内的网址是您需要的。
查询上述内容将为您提供下一个或更少100个项目的列表。
如果还有更多项目,则此xml响应将依次提供其他<link rel="next">
标记,如果不存在,则此标记将不存在。
在我看来,最好能够处理100件套的5000件而不是一件。
答案 3 :(得分:1)
对于现在看到此信息的任何人,您都可以使用data.d.__next
获取下100个项目。使用一些良好的旧递归,您可以得到所有类似的项目
function getItems(url) {
$.ajax({
url: url,
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: function(data) {
console.log(data);
// Do work
if (data.d.__next) {
getItems(data.d.__next);
}
},
error: function(jqxhr) {
alert(jqxhr.responseText);
}
});
}