从SharePoint(加载项)跨域

时间:2016-06-07 14:55:40

标签: ajax rest sharepoint

我注意到在使用REST调用列表时,SharePoint有100个项目的限制。我试图让它工作,所以它进行批量调用(即如果第一个调用是133个项目,进行两个调用,所以第一个接收前100个,第二个接收最后33个。)

这是我的(编辑过的)代码:

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个),但不返回我预期的数据。我使用承诺错了吗?或者是.done在服务电话上毁了它?

编辑:代码运行正常。一件事是我没有正确处理resultsArray.push()。需要循环结果数组而不是直接推送它(只返回两个索引,因为有两个调用。现在它返回133):

$.each(response.d.results, function (index, item) {
    resultsArray.push(item);
});

2 个答案:

答案 0 :(得分:0)

您的代码对我来说没问题。我只能说我总是使用自己

functionCall(param)
            .then(
            function () {
               console.log('success');
            },
            function (sender, args) {
                console.log('fail');
            });

也许这值得一试?

这也可能是一个有趣的话题:jQuery deferreds and promises - .then() vs .done()

答案 1 :(得分:0)

代码工作正常。一件事是我没有正确处理resultsArray.push()。需要循环结果数组而不是直接推送它(只返回两个索引,因为有两个调用。现在它返回133):

$.each(response.d.results, function (index, item) {
    resultsArray.push(item);
});