【问题标题】:One Datatables.net table with multiple ajax calls from Sharepoint 2010 REST API一个 Datatables.net 表,其中包含来自 Sharepoint 2010 REST API 的多个 ajax 调用
【发布时间】:2015-09-29 10:44:04
【问题描述】:

我是新来的,所以请提前原谅我这个冗长的问题。我是 SP2010 的新手,到目前为止,我按照以下教程对我的 SP 列表进行 JQuery Ajax 调用:Who Needs a Data View Web Part? SharePoint REST and DataTables.net

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

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

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

到目前为止我的代码:

<script type="text/javascript">
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);

});
});
}
</script>

在此先感谢您提出任何解决此问题的建议。

【问题讨论】:

    标签: jquery ajax rest sharepoint-2010 datatables


    【解决方案1】:

    如果您无法避免每次 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" }
             ]
          });
       });
    }
    

    【讨论】:

    • 谢谢,$then 是其中一种选择,我也尝试过,但也许我对它的理解不足以让它工作并删除它。将检查,并让您知道结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2013-12-18
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多