2016-06-07 74 views
0

我注意到,在将REST调用使用到列表中时,SharePoint有100个项目的限制。我试图让它工作,所以它进行批次调用(即如果第一个电话是133项,做两个电话,所以第一个接收前100和第二个最后33)。从SharePoint(加载项)跨域获取超过100个承诺的列表项

这是我(编辑)代码:

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),但如我所料不返回数据。我用诺言错了吗?或者是在服务调用中破坏它?

编辑:代码工作正常。有一件事是我没有正确处理resultsArray.push()。需要循环的结果数组,而不是直接将其推(只返回了两个指标,因为在这两个电话的现在,它会返回133):

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

回答

0

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

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

您的代码看起来不错给我。我只能说我总是用我自己

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

也许这是值得一试?

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

+0

感谢您指出了这一点。查看我的编辑解决方案。 – Robin

相关问题