我编写了以下代码以将记录插入主机站点中包含的列表中。
var projectItems = [
{ Title: "SharePoint", ProjectDescription: "SharePoint 2013", ProjectManager: "Test0" },
{ Title: "Lync", ProjectDescription: "Lync 2013", ProjectManager: "Test1" },
{ Title: "Exchange", ProjectDescription: "Exchange 2013", ProjectManager: "Test2" }
];
function insertListItems(items) {
for (var item in items) {
var inputData = new Object();
var type = new Object();
type.type = getListItemType(listName);
inputData.__metadata = type;
for (var prop in items[item]) {
inputData[prop] = items[item][prop];
}
console.log(JSON.stringify(inputData));
console.log(url);
var obj = {
url: url,
type: "POST",
contentType: "application/json; odata=verbose",
data: JSON.stringify(inputData),
headers: { "Accept": "application/json; odata=verbose", "X-RequestDigest": $("#__REQUESTDIGEST").val() },
success: function (successData) { console.log("insert successful"); },
error: function (errorData) { console.log("insert failed") }
};
if (parent) {
var exec = new SP.RequestExecutor(appWebUrl);
exec.executeAsync(obj);
} else {
$.ajax(obj);
}
}
}
insertListItems(projectItems);
当我运行它时,它会打印
{"__metadata":{"type":"SP.Data.ProjectsListItem"},"Title":"SharePoint","ProjectDescription":"SharePoint 2013","ProjectManager":"Test0"}
http://app-e9f4c136adfd88.abhiapps.com/SPAppHelper/_api/SP.AppContextSite(@target)/web/lists/getbytitle ('项目')/items?@target=' http://dev.abhi.com '
{"__metadata":{"type":"SP.Data.ProjectsListItem"},"Title":"Lync","ProjectDescription":"Lync 2013","ProjectManager":"Test1"}
http://app-e9f4c136adfd88.abhiapps.com/SPAppHelper/_api/SP.AppContextSite(@target)/web/lists/getbytitle ('项目')/items?@target=' http://dev.abhi.com '
{"__metadata":{"type":"SP.Data.ProjectsListItem"},"Title":"Exchange","ProjectDescription":"Exchange 2013","ProjectManager":"Test2"}
http://app-e9f4c136adfd88.abhiapps.com/SPAppHelper/_api/SP.AppContextSite(@target)/web/lists/getbytitle ('项目')/items?@target=' http://dev.abhi.com '
插入成功 插入成功 插入成功
我对此源代码有多个问题
实际上没有插入任何记录。但不会引发任何错误。
如何确保在我的 main 方法中...... insertListItems 方法之后的代码仅在成功插入所有 3 条记录时才执行。目前由于 javascript 的异步特性,即使在插入任何内容之前,流程也会向前移动。
我在选项 2 上搜索了一下,发现 jquery 有一个承诺和延迟对象模式,但似乎 SP.RequestExecutor.executeAsync 没有遵循这一点,并在“完成”方法上抛出一个错误,说不支持这种方法。
这就是我的列表的样子