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

时间:2014-09-26 15:27:07

标签: rest sharepoint sharepoint-2007 sharepoint-2013

标题非常准确地说明了我的问题。如果我尝试使用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: ...

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

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

由于

4 个答案:

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

相关问题