无法使用jQuery将数据保存至SharePoint列表的技术求助
问题分析与解决方案
核心错误原因
你遇到的Cannot read properties of undefined (reading 'apply')错误,根源是Function.createDelegate的上下文绑定问题——在全局作用域中this指向window,但onQuerySucceeded和onQueryFailed是全局函数,用createDelegate反而会导致上下文混乱,触发调用失败。
同时还有两个潜在问题需要修正:
- SharePoint日期列可直接接收
Date对象,无需手动转ISO字符串(手动转换可能引发时区或格式兼容问题) - 全局变量
this.GetListItem易造成命名冲突,建议改为局部变量
修正后的代码
// 获取当前日期与用户信息 const DateCrea = new Date(); const Demandeur = _spPageContextInfo.userDisplayName; console.log("date:", DateCrea); console.log("demandeur:", Demandeur); console.log("fin de l'affichage"); // 确保Title和Batiment是从表单获取的有效变量 // 示例:const Title = document.getElementById("titleInput").value; // const Batiment = document.getElementById("batimentInput").value; var siteUrl = _spPageContextInfo.webAbsoluteUrl; var clientContext = new SP.ClientContext(siteUrl); var targetList = clientContext.get_web().get_lists().getByTitle('TestArmand'); var itemCreateInfo = new SP.ListItemCreationInformation(); var newListItem = targetList.addItem(itemCreateInfo); // 设置列表字段值 newListItem.set_item('Titre', Title); newListItem.set_item('B_x00e2_timent', Batiment); newListItem.set_item('Date', DateCrea); // 直接传入Date对象 newListItem.set_item('Demandeur', Demandeur); newListItem.update(); clientContext.load(newListItem); // 直接传入函数引用,无需Function.createDelegate clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed); function onQuerySucceeded() { alert('Record Inserted'); } function onQueryFailed(sender, args) { alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); }
额外检查项
- 变量有效性:确保
Title和Batiment已从表单中正确获取(比如通过document.getElementById或jQuery选择器),控制台已打印titre的值,确认Title变量存在即可。 - SP脚本加载:确保页面已正确加载SharePoint核心脚本(
sp.js和sp.runtime.js),可通过以下方式确保加载完成后再执行代码:
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() { // 上述核心代码放在这里 });
- 字段权限:确认当前用户对
TestArmand列表有创建项的权限(虽支持团队排除了安全策略,但仍需验证)。
内容的提问来源于stack exchange,提问作者Frenchineer Gaming
相关产品推荐
相关产品推荐

