尝试过帐到SharePoint列表:'SP'未定义ReferenceError:'SP'未定义

时间:2019-12-12 18:51:54

标签: jquery sharepoint

我正在尝试编写一个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文件中使用的其他脚本均未更改。

1 个答案:

答案 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