分享分页

时间:2015-01-19 07:45:39

标签: api rest sharepoint pagination

我尝试使用Sharepoint Rest Api创建客户端分页,我使用$ skip和$ top参数:

http://siteurl/_api/lists/getByTitle(list name)/items?$skip=0&$top=2

但是:

http://siteurl/_api/lists/getByTitle(list name)/items?$skip=2&$top=2

我的结果与第一个链接相同

我知道__next url作为回应,但我需要在页面之间进行回复和分页

有没有人有用于解决这个问题的用例?

1 个答案:

答案 0 :(得分:1)

SharePoint 2013 / Online中不支持当前$skip查询选项。

根据Use OData query operations in SharePoint REST requests

  

$skip查询选项不适用于SharePoint查询   列出商品

使用SharePoint REST接口实现客户端分页有几种选择。

选项1

利用$skiptoken查询选项返回分页结果

格式:$skiptoken=Paged=TRUE&p_ID=<last item id to skip>&$top=<items count>

示例

该示例演示了如何从2库中检索id等于或大于Pages的有限数量的项目(2项):

function getPagedItems(webUrl,listTitle,startItemId,itemsCount)
{
    var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle +  "')/items?$skiptoken=" + encodeURIComponent('Paged=TRUE&p_SortBehavior=0&p_ID=' + (startItemId-1) + '&$top=' + itemsCount);
    return executeRequest(endpointUrl,'GET');
}


getPagedItems('https://contoso.sharepoint.com/','Pages',2,2)
.done(function(data){
    if(data.d.results.length == 0){
        console.log('Items not found');
        return;
    }
    for(var i = 0; i < data.d.results.length; i++){
        var item = data.d.results[i];
        console.log(item.Title);
    }   
});

,其中

function executeRequest(url,method,headers,payload) 
{
    if (typeof headers == 'undefined'){
        headers = {};
    }
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
       url: url,   
       type: method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if(method == "POST") {
      ajaxOptions.data = JSON.stringify(payload);
    }  

    return $.ajax(ajaxOptions);
}

选项2

利用SharePoint 2010 REST界面,使用$skip查询选项检索分页结果:

端点示例:https://contoso.sharepoint.com/_vti_bin/ListData.svc/Pages?$skip=2&$top=2