我正在尝试编写一个JS函数,该函数将POST请求发送到SharePoint列表,以向该列表添加新的List项目。我过去使用SP.ClientContext进行了此操作,并希望继续这样做,因为这是我知道的批量发送多个插入请求的唯一方法。这是我的代码:
/**
* Inserts new items to a List
*
* @params string siteUrl
* @params object[] newListItems
* @params string listName
* @params string[] listItemFields
*
* @returns bool
**/
function insertListItems(siteUrl, newListItems, listName, listItemFields) {
if(newListItems.length == 0) {
return false;
}
var clientContext = new SP.ClientContext.get_current();
var olist = clientContext.get_web().get_lists().getByTitle(listName);
// Get SP list
var itemCreateInfo = new SP.ListItemCreationInformation();
for(var i = 0; i < newListItems.length; i++) {
oListItem = olist.addItem(itemCreateInfo);
for(var j = 0; j < listItemFields.length; j++) {
oListItem.set_item(listItemFields[j], newListItems[i][listItemFields[j]]);
}
oListItem.update();
}
clientContext.load(oListItem);
clientContext.executeQueryAsync(
this.successHandler("Items inserted to " + listName),
this.errorHandler()
);
}
我已将此代码移到新的SP站点,但是现在当我尝试运行该函数时,在控制台中出现“ jQuery.Deferred异常:'SP'未定义ReferenceError:'SP'未定义”。一个潜在的问题是此代码最初是在列表位于同一站点的SP站点中编写的。现在,我在SP站点的子站点中工作,而List在同一SP站点的另一个子站点中(不是我的呼叫:/)。另一个潜在的问题是,在将其全部添加到网站中嵌入的html内的script标签之前。现在,我已将JS从该html文件中移出,并使用一个外部脚本标签来引用它,尽管我在html文件中使用的其他脚本均未更改。
答案 0 :(得分:0)
在引用此脚本文件之前,您是否尝试过在html文件中显式引用SP.js?如果没有,请尝试这样做。如果是,请尝试使用ExecuteOrDelayUntilScriptLoaded
让SharePoint在执行功能之前加载SP.js:
jQuery(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(myfunction, "sp.js");
});
function myfunction() {
// your code goes here
}
如果列表位于其他子站点中,则应使用其URL获取该特定站点的上下文,以获取其列表/库等。
var URL = [site url]
var clientContext = new SP.ClientContext(URL);
请查看是否有帮助。
编辑
请检查以下答案,该答案提供了许多可以尝试的选项,可以在函数调用之前加载所需的脚本: https://stackoverflow.com/a/17326405/2836750