Sharepoint Online,Javascript在Firefox中不起作用

Sharepoint Online, Javascript not working in Firefox

本文关键字:Firefox 不起作用 Javascript Online Sharepoint      更新时间:2023-09-26

使用 JavaScript 制作 SharePoint 应用程序来管理数据级别。

这在IE和Chrome中可以找到,但在Firefox中没有任何作用,没有错误没有警告,只是没有行动!

function List_AddCompany() {
    var ListName = "CompanyInfo";
    var context = new SP.ClientContext.get_current();
    var lstObject = context.get_web().get_lists().getByTitle(ListName);
    var listItemCreationInfo = new SP.ListItemCreationInformation();
    var newItem = lstObject.addItem(listItemCreationInfo);
        newItem.set_item('CPY_ID', $('#CPY_ID').text());
        newItem.set_item('CPY_Name', $('#CPY_Name').val());
        newItem.set_item('CPY_OverDuePercentage', $('#CPY_OverDuePercentage').val());
    newItem.update();
    context.executeQueryAsync(Function.createDelegate(this, onSuccess),
        Function.createDelegate(this, onFailure));
    function onSuccess() {
        console.log("Company added successfully");
    }
    function onFailure(sender, args) {
        console.log("There was an error creating company", args);
    }
}    

任何想法都会很棒

我们遇到了同样的问题。
修复是将函数 onSuccess() 和函数 onFailure(sender, args) 带到函数 List_AddCompany() 之外

如果使用调试器在上下文之后单步执行当前代码,则调试器将登陆失败方法,并且不会进入方法内部,而是返回到调用函数,并将结束代码而不会出现任何错误。

function List_AddCompany() {
    var ListName = "CompanyInfo";
    var context = new SP.ClientContext.get_current();
    var lstObject = context.get_web().get_lists().getByTitle(ListName);
    var listItemCreationInfo = new SP.ListItemCreationInformation();
    var newItem = lstObject.addItem(listItemCreationInfo);
    newItem.set_item('CPY_ID', $('#CPY_ID').text());
    newItem.set_item('CPY_Name', $('#CPY_Name').val());
    newItem.set_item('CPY_OverDuePercentage', $('#CPY_OverDuePercentage').val());
    newItem.update();
    context.executeQueryAsync(Function.createDelegate(this, onSuccess),
        Function.createDelegate(this, onFailure));
}
function onSuccess() {
    console.log("Company added successfully");
}
function onFailure(sender, args) {
    console.log("There was an error creating company", args);
}
按照

@Vaibhav的建议删除了所有内部函数,这使我能够很好地看到由此产生的问题。因此,为了解决这个问题,我编写了一个延迟代码块来处理所有添加,这似乎适用于跨浏览器(即使 MS 网站说另一种方式有效)

下面是延迟语句的代码及其用法。

function addListItems(listTitle, propertiesToAdd) {
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var list = web.get_lists().getByTitle(listTitle);
var listItemCreationInfo = new SP.ListItemCreationInformation();
var newItem = list.addItem(listItemCreationInfo);
propertiesToAdd.forEach(function (entry) {
    newItem.set_item(entry.ID, entry.newval);
});
    newItem.update();
var d = $.Deferred();
ctx.executeQueryAsync(function () {
    d.resolve(true);
},
function (sender, args) {
    d.reject(args);
});
return d.promise();

}

和使用代码

SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function () {
    var listTitle = 'List Name';
    var propertiesToAdd = [];
    propertiesToAdd.push({
        ID: "Property Name",
        newval: Property Value,
    })
    propertiesToAdd.push({
        ID: "Property Name",
        newval: Property Value,
    })
    addListItems(listTitle, propertiesToAdd)
    .done(function (items) {
        console.log("added successfully");
    })
    .fail(function (error) {
        console.log("There was an error creating company", error);
    });
});