Sharepoint 2013 REST API不返回列表的所有项目

问题描述 投票:10回答:4

标题非常准确地说明了我的问题。如果我尝试使用sharepoint的REST API从列表中收集所有400多个项目,我只会获得前100个。

我已阅读http://msdn.microsoft.com/en-us/library/office/dn292552(v=office.15).aspx并在“使用REST处理列表项”部分,他们说明了

以下示例显示如何检索列表的所有项目。

url: http://site url/_api/web/lists/GetByTitle(‘Test')/items

method: GET

headers: ...

我突出了所有的话,因为那不是我得到的......

我错过了什么吗?是否有一些选项我应该禁用/启用以获得真正的所有项目?

谢谢

rest sharepoint sharepoint-2007 sharepoint-2013
4个回答
26
投票

限制是由于服务器端分页。

解决方法是一次检索100个项目,或通过输入项目计数覆盖限制:

https://$DOMAIN/$SITE/_api/web/Lists/getByTitle('$LIST')/Items?$top=1000

请注意,还有一个阈值为5000。


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件而不是它们。


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));
}

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);
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.