【发布时间】:2021-01-14 06:38:23
【问题描述】:
我从事一个项目已经有一段时间了。 我发现这个post 有点用处,但不确定它是否适合我的使用。
功能:
- 使用 GET 请求从 8 个不同的子网站读取 SharePoint 列表项。
- 在单个登录页面的数据表中以有序(分组)方式填充这些项目。
- DataTable 具有按程序分组的可折叠/可展开行,然后是可交付成果。
- 带有打印/excel/PDF/更新表格按钮的下拉菜单。
- 更新表有一个 HTML 表单,可将数据发送回与 FORM 输入相关的 SharePoint 列表。
我目前正在使用所有列表所在的 8 个不同的子站点。我想根据其“程序”值将新项目发送到正确的列表,因为每个不同的列表都是不同的程序。我知道我必须使用 if/else 语句,但是我将如何使用 AJAX 调用来解决这个问题?
这是我的 JS “POST”代码:
$("#btn").click(function(e) {
PostItem();
});
});
function PostItem() {
return getFormDigest("https://baseurl.sharepoint.com/sites/Projects/USMC/AMMO/Lists/AMMODeliverables/").then(function(digestData) {
console.log(digestData.d.GetContextWebInformation.FormDigestValue);
var item = {
"__metadata": { "type": "SP.Data.AMMODeliverablesListItem" },
"Title": "updated title",
"Program": $("#dProgram").val(),
"Deliverable": $("#dDeliverable").val(),
"To": $("#dTo").val(),
"Date": $("#dDate").val(),
"Approved": $("#dApproved").val(),
"Notes": $("#dNotes").val()
};
$.ajax({
async: true, // Async by default is set to “true” load the script asynchronously
// URL to post data into sharepoint list or your own url
url: "https://baseurl.sharepoint.com/sites/Projects/USMC/AMMO/_api/web/lists/getbytitle('AMMO Deliverables')/items",
method: "POST", //Specifies the operation to create the list item
data: JSON.stringify(item),
headers: {
"content-type": "application/json;odata=verbose",
"X-RequestDigest": digestData.d.GetContextWebInformation.FormDigestValue,
"Accept": "application/json;odata=verbose",
"If-Match": "*"
},
success: function(data) {
alert('Success'); // Used sweet alert for success message
console.log(data + " success in updating item");
},
error: function(data) {
alert(JSON.stringify(item));
console.log(data);
}
});
})
}
function getItemTypeForListName(listName) {
var itemType = "SP.Data." + listName.charAt(0).toUpperCase() + listName.slice(1) + "ListName";
var encItemType = itemType.replace(/\s/g,'_x0020_');
return(encItemType);
}
function getFormDigest(baseurl) {
return $.ajax({
url: "https://baseurl.sharepoint.com/sites/Projects/USMC/AMMO/_api/contextInfo",
method: 'POST',
headers: {
'Accept': 'application/json; odata=verbose'
}
});
}
更新: 我觉得我的方向有点正确,但它不起作用:
function PostItem() {
return getFormDigest("https://siteurl.sharepoint.com/sites/Projects/USMC/AMMO/Lists/AMMODeliverables/").then(function(digestData) {
console.log(digestData.d.GetContextWebInformation.FormDigestValue);
var item = {
"__metadata": { "type": "SP.Data.AMMODeliverablesListItem" },
"Title": "updated title",
"Program": $("#dProgram").val(),
"Deliverable": $("#dDeliverable").val(),
"To": $("#dTo").val(),
"Date": $("#dDate").val(),
"Approved": $("#dApproved").val(),
"Notes": $("#dNotes").val()
};
if (dProgram == "AMMO"){
$.ajax({
async: true, // Async by default is set to “true” load the script asynchronously
// URL to post data into sharepoint list or your own url
url: "https://siteurl.sharepoint.com/sites/Projects/USMC/AMMO/_api/web/lists/getbytitle('AMMO Deliverables')/items",
method: "POST", //Specifies the operation to create the list item
data: JSON.stringify(item),
headers: {
"content-type": "application/json;odata=verbose",
"X-RequestDigest": digestData.d.GetContextWebInformation.FormDigestValue,
"Accept": "application/json;odata=verbose",
"If-Match": "*"
},
success: function(data) {
alert('Success'); // Used sweet alert for success message
console.log(data + " success in updating item");
},
error: function(data) {
alert(JSON.stringify(item));
console.log(data);
}
});
}
else if (dProgram == "AHR"){
【问题讨论】:
-
ajax期望data是一个活动对象,不要对对象进行字符串化。 -
@Teemu 这与发送到 8 个不同的站点有什么关系。那是我的问题。但是取消您的评论,将其字符串化,并且仍然按预期发布到 SharePoint 列表。我可以将 data: JSON.stringify(item) 更改为 data: item,
-
@Teemu 几乎所有您可以找到的通过 SharePoint REST API 使用
jQuery.ajax()创建 SharePoint 列表项的示例都让您对项的 JSON 进行字符串化。那里有很多例子,因为:它有效。其他 API 是否期望活动对象在这里无关紧要。 -
@DylanCristy 进入服务器的所有内容都是字符串。如果您希望服务器获取格式正确的数据,请将活动对象传递给
.ajax,否则服务器获取的是字符串化字符串。如果服务器知道会发生什么,这将起作用。但是根据本示例中设置的标头,服务器期望获得 JSON,这与将字符串传递给.ajax时所获得的不同。我不知道在这种特定情况下它是否相关,但是当下一个请求取决于上一个请求的成功时,很可能链在这里被打破了。 -
这是向服务器发送 JSON 数据。想查看通过 POST 请求发送的有效负载请求吗?无论如何,这不是我遇到的问题...检查我最近的编辑。
标签: javascript jquery ajax rest sharepoint