一个Datatables.net表,其中包含来自Sharepoint 2010 REST API的多个ajax调用

我是新来的,所以请提前告诉我冗长的问题。 我是SP2010的新手,到目前为止,按照以下教程对我的SP列表进行JQuery Ajax调用: 谁需要数据视图Web部件? SharePoint REST和DataTables.net

我(和每个人)的问题是,SP2010 listdata.svc只返回JSON中的前1000个条目。 然而,教程建议使用预过滤方法来仅调用用户需要的数据,在我的情况下,我想将所有200多个条目加载到表中,然后让用户选择/过滤他/她要。

我设法做了两个Ajax调用( 一个有前1000个条目,另一个有剩余的2000个 – 用于测试,以便于查看,其中哪些进入表中 ),并且在调试器中两个GET请求都进行out并返回状态200-OK和数据,但只有其中一个被加载到表中。

问题:是否有任何方法在传递给Datatable之前组合返回的jqXHR响应,或者是否有任何设置,在表初始化之后,第二个数据不会覆盖第一个? 我知道,对于大多数人来说,多个ajax调用是“不行”,但在我的情况下,由于我的服务器的速度和表的使用频率,这不是问题,但到目前为止我找到了解决方案填充多个表的多个调用主题。

我的代码到目前为止:

 function LoadData() { var call = $.ajax({ url: "https://SP2010_siteaddress.com/site/_vti_bin/listdata.svc/Listname?$select=Data1,Data2,Data3,Data4,Data5", type: "GET", dataType: "json", headers: { Accept: "application/json;odata=verbose" } }); var call2 = $.ajax({ url: "https://SP2010_siteaddress.com/site/_vti_bin/listdata.svc/Listname?$select=Data1,Data2,Data3,Data4,Data5&$skiptoken=2000", type: "GET", dataType: "json", headers: { Accept: "application/json;odata=verbose" } }); (call, call2).done(function (data,textStatus, jqXHR){ $('#example') .on('xhr.dt', function ( e, settings, json ) { for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) { json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two; } // Note no return - manipulate the data directly in the JSON object. } ) .dataTable({ ajax: "data.json", "bServerside" : true, "bProcessing": false, "aaData": data.d.results, "aoColumns": [ { "mData": "Data1" }, { "mData": "Data2" }, { "mData": "Data3" }, { "mData": "Data4" }, { "mData": "Data5" } ], "bRetrieve": true, // "initComplete": function(settings, json) { // alert( 'DataTables has finished its initialisation.' ); // } }); call.fail(function (jqXHR,textStatus,errorThrown){ alert("Error retrieving Tasks: " + jqXHR.responseText); }); }); }  

在此先感谢如何解决这个问题的任何建议。

如果您无法避免每个Ajax调用限制1000条记录,则可以使用下面的代码。

当两个Ajax调用都成功时,它使用$ .when来执行回调。

 function LoadData() { var call1 = $.ajax({ url: "https://SP2010_siteaddress.com/site/_vti_bin/listdata.svc/Listname?$select=Data1,Data2,Data3,Data4,Data5", type: "GET", dataType: "json", headers: { Accept: "application/json;odata=verbose" } }); var call2 = $.ajax({ url: "https://SP2010_siteaddress.com/site/_vti_bin/listdata.svc/Listname?$select=Data1,Data2,Data3,Data4,Data5&$skiptoken=2000", type: "GET", dataType: "json", headers: { Accept: "application/json;odata=verbose" } }); // When both Ajax requests were successful $.when(call1, call2).done(function(a1, a2){ // a1 and a2 are arguments resolved for the call1 and call2 ajax requests, respectively. // Each argument is an array with the following structure: [ data, statusText, jqXHR ] // Merge data from two Ajax calls var data = a1[0].d.results.concat(a2[0].d.results); $('#example').dataTable({ "aaData": data, "aoColumns": [ { "mData": "Data1" }, { "mData": "Data2" }, { "mData": "Data3" }, { "mData": "Data4" }, { "mData": "Data5" } ] }); }); }