发出 POST 请求时出现 400 错误(将项目添加到 SharePoint 列表)
400 error when making POST request (adding item to SharePoint list)
我有一个包含复选框和输入字段的表单,点击提交按钮应该理想地将内容值添加到 SP 列表。
当我 运行 调试器时,我可以看到每个输入(选中的项目、文本输入等)都被传递到 addItemToSPList
,但是当我打开“网络”选项卡时,我得到以下信息错误:”值:“尝试读取 属性 的值时,从 JSON reader 中读取了类型 'StartArray' 的节点;但是,需要 'PrimitiveValue' 或 'StartObject' 节点。"
我怀疑我的 ajax
块(可能是 url)有问题,但我不是 100% 确定。
有什么想法吗?
JS代码:
handleClick() {
let specialtiesArr = [],
regionsArr = [],
commentsArr = [],
nameArr = [];
$(".check-spec:checked").each(function() {
specialtiesArr.push($(this).val());
})
$(".check-region:checked").each(function() {
regionsArr.push($(this).val());
})
commentsArr.push($('.request-text-area').val());
nameArr.push($('.submitter-name').val());
addItemToSPList(specialtiesArr, regionsArr, commentsArr, nameArr)
}
} // export default class closing bracket
function addItemToSPList(getSpecialties, getRegions, getComments, getSubmitterName) {
let specialistRequestsColumns = {
"__metadata":{"type": "SP.Data.Specialist_x0020_RequestsListItem"},
"Title": "No Title", // marked it as "not required" in the SP list backend
"Specialties": { '__metadata': { 'type' : 'Collection(Edm.String)'}, results: getSpecialties }, // multi-select checkboxes
"Regions": { '__metadata': { 'type' : 'Collection(Edm.String)'}, results: getRegions }, // multi-select checkboxes
"Comments": getComments, // text box
"Submitter_x0020_Name": getSubmitterName // input field
}
let listName = "Specialist%20Requests";
$.ajax({
url: `${_globalUrl}/redacted/_api/web/lists/getByTitle('${listName}')/items`, // ?$select=ListItemEntityTypeFullName
method: "POST", // type
async: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(specialistRequestsColumns),
xhrFields: {
withCredentials: true
},
headers: {
"Accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: data => {
console.log("upload successful")
// console.log(data)
},error: (err) => {
console.log("Error: " + err);
}
})
}
我从 SharePoint Stack Exchange 上的好心人那里得到了答案。
基本上,Comments
和 Submitter_x0020_Name
列需要 字符串 ,所以当我传递数组值时它抛出了错误。
这是更新后的代码:
handleClick() {
let comments, submitterName;
let specialtiesArr = [],
regionsArr = [];
$(".check-spec:checked").each(function() {
specialtiesArr.push($(this).val());
})
$(".check-region:checked").each(function() {
regionsArr.push($(this).val());
})
comments = $('.request-text-area').val();
submitterName = $('.submitter-name').val();
addItemToSPList(specialtiesArr, regionsArr, comments, submitterName)
}
我有一个包含复选框和输入字段的表单,点击提交按钮应该理想地将内容值添加到 SP 列表。
当我 运行 调试器时,我可以看到每个输入(选中的项目、文本输入等)都被传递到 addItemToSPList
,但是当我打开“网络”选项卡时,我得到以下信息错误:”值:“尝试读取 属性 的值时,从 JSON reader 中读取了类型 'StartArray' 的节点;但是,需要 'PrimitiveValue' 或 'StartObject' 节点。"
我怀疑我的 ajax
块(可能是 url)有问题,但我不是 100% 确定。
有什么想法吗?
JS代码:
handleClick() {
let specialtiesArr = [],
regionsArr = [],
commentsArr = [],
nameArr = [];
$(".check-spec:checked").each(function() {
specialtiesArr.push($(this).val());
})
$(".check-region:checked").each(function() {
regionsArr.push($(this).val());
})
commentsArr.push($('.request-text-area').val());
nameArr.push($('.submitter-name').val());
addItemToSPList(specialtiesArr, regionsArr, commentsArr, nameArr)
}
} // export default class closing bracket
function addItemToSPList(getSpecialties, getRegions, getComments, getSubmitterName) {
let specialistRequestsColumns = {
"__metadata":{"type": "SP.Data.Specialist_x0020_RequestsListItem"},
"Title": "No Title", // marked it as "not required" in the SP list backend
"Specialties": { '__metadata': { 'type' : 'Collection(Edm.String)'}, results: getSpecialties }, // multi-select checkboxes
"Regions": { '__metadata': { 'type' : 'Collection(Edm.String)'}, results: getRegions }, // multi-select checkboxes
"Comments": getComments, // text box
"Submitter_x0020_Name": getSubmitterName // input field
}
let listName = "Specialist%20Requests";
$.ajax({
url: `${_globalUrl}/redacted/_api/web/lists/getByTitle('${listName}')/items`, // ?$select=ListItemEntityTypeFullName
method: "POST", // type
async: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(specialistRequestsColumns),
xhrFields: {
withCredentials: true
},
headers: {
"Accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: data => {
console.log("upload successful")
// console.log(data)
},error: (err) => {
console.log("Error: " + err);
}
})
}
我从 SharePoint Stack Exchange 上的好心人那里得到了答案。
基本上,Comments
和 Submitter_x0020_Name
列需要 字符串 ,所以当我传递数组值时它抛出了错误。
这是更新后的代码:
handleClick() {
let comments, submitterName;
let specialtiesArr = [],
regionsArr = [];
$(".check-spec:checked").each(function() {
specialtiesArr.push($(this).val());
})
$(".check-region:checked").each(function() {
regionsArr.push($(this).val());
})
comments = $('.request-text-area').val();
submitterName = $('.submitter-name').val();
addItemToSPList(specialtiesArr, regionsArr, comments, submitterName)
}