如何将 post Ajax 数据发送到您的服务器以更新 SharePoint 列表数据
How to post Ajax Data to your server to update SharePoint list data
我已经在这个 DataTable 上工作了一段时间,除了最后一件事之外,我拥有我需要的所有功能。现在,我的 table 从 AJAX“GET”请求中读取 SharePoint 列表数据,并填充它并根据 parent/child 行对其进行组织。
我需要我的 DataTable 执行的最后一个功能是创建一个按钮,允许您将新行添加到 table,然后它将根据以下内容自动将其分类到正确的子行中“计划和可交付成果”类别。之后,我想让 DataTable 将数据发送到相应的 SharePoint 列表,这可以通过 AJAX "POST" 请求来完成吗?
我怎样才能实现这个目标?我现在完全迷失了。
这是我的代码:
function loadData() { //Initializing the AJAX Request function to load in the external list data from different subsites
//create an array of urls to run through the ajax request instead of having to do multiple AJAX Requests
var urls = ["url1","url2","url3","url4","url5","url6","url7","url8"];
for (i=0; i < urls.length; i++) { //for loop to run through the AJAX until all URLs have been reached
$.ajax({
url: urls[i],
'headers': { 'Accept': 'application/json;odata=nometadata' },
success: function (data) { // success function which will then execute "GETTING" the data to post it to a object array (data.value)
data = data;
var table = $('#myTable').DataTable();
table.rows.add( data.value ).draw();
}
});
}
}
$(document).ready(function() {
var collapsedGroups = {};
var top = '';
var parent = '';
var table = $('#myTable').DataTable( {
"columns": [
{ "data": "Program", visible: false },
{ "data": "Deliverable", visible: false },
{ "data": "To" },
{ "data": "Date" },
{ "data": "Approved" },
{ "data": "Notes" }
],
dom: "<'row'<'col-sm-12 col-md-10'f><'col-sm-12 col-md-2'B>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
buttons: [{
extend: 'collection',
className: "btn-dark",
text: 'Export',
buttons:
[{
extend: "excel", className: "btn-dark"
},
{
extend: "pdf", className: "btn-dark"
},
{
extend: "print", className: "btn-dark"
},
],
}],
order: [[0, 'asc'], [1, 'asc'] ],
rowGroup: {
dataSrc: [
'Program',
'Deliverable'
],
startRender: function (rows,group,level){
var all;
if (level === 0) {
top = group;
all = group;
} else if (level === 1) {
parent = top + group;
all = parent;
// if parent collapsed, nothing to do
if (!collapsedGroups[top]) {
return;
}
} else {
// if parent collapsed, nothing to do
if (!collapsedGroups[parent]) {
return;
}
all = top + parent + group;
}
var collapsed = !collapsedGroups[all];
console.log('collapsed:', collapsed);
rows.nodes().each(function(r) {
r.style.display = collapsed ? 'none' : '';
});
//Add category name to the <tr>.
return $('<tr/>')
.append('<td colspan="8">' + group + ' (' + rows.count() + ')</td>')
.attr('data-name', all)
.toggleClass('collapsed', collapsed);
}
}
} );
loadData();
$('#myTable tbody').on('click', 'tr.dtrg-start', function () {
var name = $(this).data('name');
collapsedGroups[name] = !collapsedGroups[name];
table.draw(false);
});
var table = $('#example').DataTable( {
var urls = ["url1","url2","url3","url4","url5",...];
for (i=0; i < urls.length; i++) {
ajax: {
url: urls[i],
method: "POST",
data: function( ) {
return dataToSend;
}
},
}
} );
} );
} );
.btn-dark {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
div.container {
min-width: 980px;
margin: 0 auto;
}
.header {
padding: 10px;
text-align: center;
}
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
div.dt-button-collection {
position: static;
}
<link rel ="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css"/>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.js"></script>
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.flash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.print.min.js"></script>
<script src="https://cdn.datatables.net/rowgroup/1.1.2/js/dataTables.rowGroup.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.3/js/buttons.bootstrap4.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<link rel ="stylesheet" href="https://cdn.datatables.net/rowgroup/1.1.2/css/rowGroup.bootstrap4.min.css"/>
<link rel ="stylsheet" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css"/>
<link rel ="stylesheet" href="https://cdn.datatables.net/buttons/1.6.3/css/buttons.bootstrap4.min.css"/>
<h1><strong>Deliverables</strong></h1>
<p><strong>Click the Program/Deliverable names to Collapse/Expand the rows</strong></p>
</div>
<div class ="container">
<table id="myTable" class="table table-bordered" cellspacing="0" width="100%">
<thead class="thead-dark">
<tr>
<th>Program</th>
<th>Deliverable</th>
<th>To</th>
<th>Date</th>
<th>Approved</th>
<th>Notes</th>
</tr>
</thead>
<tfoot class="thead-dark">
<tr>
<th>Program</th>
<th>Deliverable</th>
<th>To</th>
<th>Date</th>
<th>Approved</th>
<th>Notes</th>
</tr>
</tfoot>
</table>
</div>
我相信这应该是将数据从 DataTable 发送到 SharePoint 列表的正确函数,但它目前没有用,因为我不知道如何向数据添加新的 rows/datatable.
function sendData() {
var urls = ["url1","url2","url3","url4","url5","url6","url7","url8"];
var data1 = {
Program: 'Please provide the Program name here',
Deliverable: 'Please provide the type of deliverable here',
To: 'Please provide the recipients email here',
Date: 'Please provide the submission date here',
Approved: 'Please provide where or not the deliverable has been approved here',
Notes: Please provide notes about the deliverable here'
};
$.ajax({
for (i=0; i < urls.length; i++) {
$.ajax({
url: urls[i],
method: "POST",
data: JSON.stringify(data),
headers: { "Accept": "application/json; odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function (data) {
alert('Item added successfully');
},
error: function (error) {
alert("Error: "+ JSON.stringify(error));
}
});
}
});
}
您可以使用标准 jQuery ajax data
选项从 DataTales ajax 请求中 post 数据到服务器 - 但稍作修改以符合 DataTables 使用的方式它。
用于将动态构建的数据发送到服务器的 DataTables 语法是 documented here。方法是这样的:
ajax: {
type: "POST", // or "GET"
url: "http://whatever.com/endpoint",
data: function () {
return dataToSend; // dataToSend is just my JS variable
}
}
注意这里的data
选项是一个函数,其中returns要发送到服务器的数据。
变量 dataToSend
的数据可以通过多种方式准备,具体取决于您的具体需要和上下文。
例如,它可以是一个标准的内容 HTML <form>
- 所有表单输入字段的值。在这种情况下,您可能希望将表单的数据转换为 JSON(例如,使用 jQuery 的 $.serialize()
函数或 $.serializeArray()
函数。
如果您的 JavaScript 代码中已经有一个 JSON 对象,您可以通过设置 ajax contentType
并字符串化您的 JSON 来发送它- 像这样:
ajax: {
type: "POST", // or "GET"
url: "http://whatever.com/endpoint",
data: function () {
contentType: "application/json",
return JSON.stringify(dataToSend);
}
}
(否则默认内容类型为 application/x-www-form-urlencoded
。)
这是一个示例,我们在同一页面中有一个简单的表单作为数据表:
<form id ="formOne">
<input id="fieldOne" type="text" name="fieldOne"></input>
<input id="fieldTwo" type="text" name="fieldTwo"></input>
<input type="submit" value="Submit">
</form>
表单有两个输入字段和一个提交按钮。
DataTableajax部分如下:
var table = $('#example').DataTable( {
ajax: {
url: "http://whatever.com/endpoint",
method: "POST",
data: function( ) {
return dataToSend;
}
},
// other items not shown
} );
页面加载时,table 照常显示。
如果用户填写表单并点击提交按钮,此操作将被以下代码拦截:
var dataToSend;
$( "#formOne" ).on( "submit", function( event ) {
event.preventDefault(); // stops the standard form submission from happening
dataToSend = $( "#formOne" ).serializeArray();
console.log( dataToSend );
table.ajax.reload(); // calls the DataTables ajax request again
});
当然,由服务器处理此请求中的结果数据。因为我的示例是 POST
请求,所以这将涉及访问表单参数数据的 server-side 代码。如何执行此操作取决于您使用的 server-side 框架。
我已经在这个 DataTable 上工作了一段时间,除了最后一件事之外,我拥有我需要的所有功能。现在,我的 table 从 AJAX“GET”请求中读取 SharePoint 列表数据,并填充它并根据 parent/child 行对其进行组织。
我需要我的 DataTable 执行的最后一个功能是创建一个按钮,允许您将新行添加到 table,然后它将根据以下内容自动将其分类到正确的子行中“计划和可交付成果”类别。之后,我想让 DataTable 将数据发送到相应的 SharePoint 列表,这可以通过 AJAX "POST" 请求来完成吗?
我怎样才能实现这个目标?我现在完全迷失了。
这是我的代码:
function loadData() { //Initializing the AJAX Request function to load in the external list data from different subsites
//create an array of urls to run through the ajax request instead of having to do multiple AJAX Requests
var urls = ["url1","url2","url3","url4","url5","url6","url7","url8"];
for (i=0; i < urls.length; i++) { //for loop to run through the AJAX until all URLs have been reached
$.ajax({
url: urls[i],
'headers': { 'Accept': 'application/json;odata=nometadata' },
success: function (data) { // success function which will then execute "GETTING" the data to post it to a object array (data.value)
data = data;
var table = $('#myTable').DataTable();
table.rows.add( data.value ).draw();
}
});
}
}
$(document).ready(function() {
var collapsedGroups = {};
var top = '';
var parent = '';
var table = $('#myTable').DataTable( {
"columns": [
{ "data": "Program", visible: false },
{ "data": "Deliverable", visible: false },
{ "data": "To" },
{ "data": "Date" },
{ "data": "Approved" },
{ "data": "Notes" }
],
dom: "<'row'<'col-sm-12 col-md-10'f><'col-sm-12 col-md-2'B>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
buttons: [{
extend: 'collection',
className: "btn-dark",
text: 'Export',
buttons:
[{
extend: "excel", className: "btn-dark"
},
{
extend: "pdf", className: "btn-dark"
},
{
extend: "print", className: "btn-dark"
},
],
}],
order: [[0, 'asc'], [1, 'asc'] ],
rowGroup: {
dataSrc: [
'Program',
'Deliverable'
],
startRender: function (rows,group,level){
var all;
if (level === 0) {
top = group;
all = group;
} else if (level === 1) {
parent = top + group;
all = parent;
// if parent collapsed, nothing to do
if (!collapsedGroups[top]) {
return;
}
} else {
// if parent collapsed, nothing to do
if (!collapsedGroups[parent]) {
return;
}
all = top + parent + group;
}
var collapsed = !collapsedGroups[all];
console.log('collapsed:', collapsed);
rows.nodes().each(function(r) {
r.style.display = collapsed ? 'none' : '';
});
//Add category name to the <tr>.
return $('<tr/>')
.append('<td colspan="8">' + group + ' (' + rows.count() + ')</td>')
.attr('data-name', all)
.toggleClass('collapsed', collapsed);
}
}
} );
loadData();
$('#myTable tbody').on('click', 'tr.dtrg-start', function () {
var name = $(this).data('name');
collapsedGroups[name] = !collapsedGroups[name];
table.draw(false);
});
var table = $('#example').DataTable( {
var urls = ["url1","url2","url3","url4","url5",...];
for (i=0; i < urls.length; i++) {
ajax: {
url: urls[i],
method: "POST",
data: function( ) {
return dataToSend;
}
},
}
} );
} );
} );
.btn-dark {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
div.container {
min-width: 980px;
margin: 0 auto;
}
.header {
padding: 10px;
text-align: center;
}
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
div.dt-button-collection {
position: static;
}
<link rel ="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css"/>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.js"></script>
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.flash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.html5.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.print.min.js"></script>
<script src="https://cdn.datatables.net/rowgroup/1.1.2/js/dataTables.rowGroup.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.6.3/js/buttons.bootstrap4.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<link rel ="stylesheet" href="https://cdn.datatables.net/rowgroup/1.1.2/css/rowGroup.bootstrap4.min.css"/>
<link rel ="stylsheet" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css"/>
<link rel ="stylesheet" href="https://cdn.datatables.net/buttons/1.6.3/css/buttons.bootstrap4.min.css"/>
<h1><strong>Deliverables</strong></h1>
<p><strong>Click the Program/Deliverable names to Collapse/Expand the rows</strong></p>
</div>
<div class ="container">
<table id="myTable" class="table table-bordered" cellspacing="0" width="100%">
<thead class="thead-dark">
<tr>
<th>Program</th>
<th>Deliverable</th>
<th>To</th>
<th>Date</th>
<th>Approved</th>
<th>Notes</th>
</tr>
</thead>
<tfoot class="thead-dark">
<tr>
<th>Program</th>
<th>Deliverable</th>
<th>To</th>
<th>Date</th>
<th>Approved</th>
<th>Notes</th>
</tr>
</tfoot>
</table>
</div>
我相信这应该是将数据从 DataTable 发送到 SharePoint 列表的正确函数,但它目前没有用,因为我不知道如何向数据添加新的 rows/datatable.
function sendData() {
var urls = ["url1","url2","url3","url4","url5","url6","url7","url8"];
var data1 = {
Program: 'Please provide the Program name here',
Deliverable: 'Please provide the type of deliverable here',
To: 'Please provide the recipients email here',
Date: 'Please provide the submission date here',
Approved: 'Please provide where or not the deliverable has been approved here',
Notes: Please provide notes about the deliverable here'
};
$.ajax({
for (i=0; i < urls.length; i++) {
$.ajax({
url: urls[i],
method: "POST",
data: JSON.stringify(data),
headers: { "Accept": "application/json; odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function (data) {
alert('Item added successfully');
},
error: function (error) {
alert("Error: "+ JSON.stringify(error));
}
});
}
});
}
您可以使用标准 jQuery ajax data
选项从 DataTales ajax 请求中 post 数据到服务器 - 但稍作修改以符合 DataTables 使用的方式它。
用于将动态构建的数据发送到服务器的 DataTables 语法是 documented here。方法是这样的:
ajax: {
type: "POST", // or "GET"
url: "http://whatever.com/endpoint",
data: function () {
return dataToSend; // dataToSend is just my JS variable
}
}
注意这里的data
选项是一个函数,其中returns要发送到服务器的数据。
变量 dataToSend
的数据可以通过多种方式准备,具体取决于您的具体需要和上下文。
例如,它可以是一个标准的内容 HTML <form>
- 所有表单输入字段的值。在这种情况下,您可能希望将表单的数据转换为 JSON(例如,使用 jQuery 的 $.serialize()
函数或 $.serializeArray()
函数。
如果您的 JavaScript 代码中已经有一个 JSON 对象,您可以通过设置 ajax contentType
并字符串化您的 JSON 来发送它- 像这样:
ajax: {
type: "POST", // or "GET"
url: "http://whatever.com/endpoint",
data: function () {
contentType: "application/json",
return JSON.stringify(dataToSend);
}
}
(否则默认内容类型为 application/x-www-form-urlencoded
。)
这是一个示例,我们在同一页面中有一个简单的表单作为数据表:
<form id ="formOne">
<input id="fieldOne" type="text" name="fieldOne"></input>
<input id="fieldTwo" type="text" name="fieldTwo"></input>
<input type="submit" value="Submit">
</form>
表单有两个输入字段和一个提交按钮。
DataTableajax部分如下:
var table = $('#example').DataTable( {
ajax: {
url: "http://whatever.com/endpoint",
method: "POST",
data: function( ) {
return dataToSend;
}
},
// other items not shown
} );
页面加载时,table 照常显示。
如果用户填写表单并点击提交按钮,此操作将被以下代码拦截:
var dataToSend;
$( "#formOne" ).on( "submit", function( event ) {
event.preventDefault(); // stops the standard form submission from happening
dataToSend = $( "#formOne" ).serializeArray();
console.log( dataToSend );
table.ajax.reload(); // calls the DataTables ajax request again
});
当然,由服务器处理此请求中的结果数据。因为我的示例是 POST
请求,所以这将涉及访问表单参数数据的 server-side 代码。如何执行此操作取决于您使用的 server-side 框架。