一个 Datatables.net table 与来自 Sharepoint 2010 REST API 的多个 ajax 调用
One Datatables.net table with multiple ajax calls from Sharepoint 2010 REST API
我是新来的,请问这个冗长的问题。我是 SP2010 的新手,到目前为止按照以下教程对我的 SP 列表进行 JQuery Ajax 调用:Who Needs a Data View Web Part? SharePoint REST and DataTables.net
我(和每个人)的问题是,SP2010 listdata.svc returns 只有 JSON 中的前 1000 个条目。然而,本教程建议一种预过滤方法来仅调用用户需要的数据,在我的例子中,我想将我所有的 200 多个条目加载到 table,然后让用户 select/filter he/she 想要什么。
我设法进行了两次 Ajax 调用(一次调用了前 1000 个条目,另一个调用了 2000 以上的其余条目 - 用于测试,以便于查看,哪一个它们进入 table),在调试器中,两个 GET 请求发出并返回状态 200-OK,数据,但只有其中一个被加载到 table.
问题:在传递给数据table之前,是否有任何方法可以组合返回的jqXHR响应,或者是否有任何设置,在table初始化,第二个数据不会覆盖第一个?我知道,对于大多数人来说,多次 ajax 调用是 "no go",但就我而言,由于我的服务器速度和 [=48= 的使用频率,这不是问题],但到目前为止,我在多次调用填充多个 table 的主题中找到了解决方案。
到目前为止我的代码:
<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>
提前感谢您提出任何解决此问题的建议。
如果您无法避免每次 Ajax 调用的 1000
条记录的限制,您可以使用下面的代码。
它使用 $.when 在两个 Ajax 调用都成功时执行回调。
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" }
]
});
});
}
我是新来的,请问这个冗长的问题。我是 SP2010 的新手,到目前为止按照以下教程对我的 SP 列表进行 JQuery Ajax 调用:Who Needs a Data View Web Part? SharePoint REST and DataTables.net
我(和每个人)的问题是,SP2010 listdata.svc returns 只有 JSON 中的前 1000 个条目。然而,本教程建议一种预过滤方法来仅调用用户需要的数据,在我的例子中,我想将我所有的 200 多个条目加载到 table,然后让用户 select/filter he/she 想要什么。
我设法进行了两次 Ajax 调用(一次调用了前 1000 个条目,另一个调用了 2000 以上的其余条目 - 用于测试,以便于查看,哪一个它们进入 table),在调试器中,两个 GET 请求发出并返回状态 200-OK,数据,但只有其中一个被加载到 table.
问题:在传递给数据table之前,是否有任何方法可以组合返回的jqXHR响应,或者是否有任何设置,在table初始化,第二个数据不会覆盖第一个?我知道,对于大多数人来说,多次 ajax 调用是 "no go",但就我而言,由于我的服务器速度和 [=48= 的使用频率,这不是问题],但到目前为止,我在多次调用填充多个 table 的主题中找到了解决方案。
到目前为止我的代码:
<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>
提前感谢您提出任何解决此问题的建议。
如果您无法避免每次 Ajax 调用的 1000
条记录的限制,您可以使用下面的代码。
它使用 $.when 在两个 Ajax 调用都成功时执行回调。
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" }
]
});
});
}