Jquery 如何使用REST更新SharePoint列表中的图像url字段
我有一个SharePoint列表(我们称之为“Employee”),我使用jQuery和REST读取和写入该列表上的属性 如果我想更新一个int属性(我们称之为“EmployeeAge”),它非常简单:Jquery 如何使用REST更新SharePoint列表中的图像url字段,jquery,rest,sharepoint,Jquery,Rest,Sharepoint,我有一个SharePoint列表(我们称之为“Employee”),我使用jQuery和REST读取和写入该列表上的属性 如果我想更新一个int属性(我们称之为“EmployeeAge”),它非常简单: jQuery.ajax({ url: myUrl, type: "POST", data: JSON.stringify({ '__metadata': { 'type': 'SP.Data.EmployeeListItem' }, 'Emplo
jQuery.ajax({
url: myUrl,
type: "POST",
data: JSON.stringify({ '__metadata': { 'type': 'SP.Data.EmployeeListItem' }, 'EmployeeAge': age }),
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"content-length": 0,
"X-HTTP-Method": "MERGE",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"IF-MATCH": "*"
},
success: successHandlerUpdateEmployeeAge,
error: errorHandlerUpdateEmployeeAge
});
现在我想用同样的原理来更新列表的另一列。让我们称之为“员工形象”。列的类型为Hyperlink/Picture和子类型Picture。我想为特定列表项设置列的image url属性
如何格式化ajax调用中的数据属性以支持这种类型的更新
我可以找到上千个关于如何更新标题字段的示例,但没有一个是关于这样复杂类型的更新。在谷歌搜索了更正列名问题后得到的错误消息后,我找到了答案。事实证明这很简单: 为了更新这样的复杂类型,您需要将其作为javascript对象提供,而不是:
'EmployeeImage': 'http://myurl'
使用此符号提供对象结构:
'EmployeeImage': {Url: 'http://myurl', Description: 'This is the description'}
看看这篇为我指明了正确方向的文章:[您是否尝试只发送图像的url?或者您还需要描述?是的,当然,我收到了一个“错误请求”错误。但实际上您的评论让我仔细检查了一下,在用Fiddler检查了请求后,我注意到一条我以前没有看到过的更详细的错误消息:“属性”EmployeeImage类型SP.Data.EmployeeListItem上不存在。这使我认为属性名称是从url/描述结构中生成的,因此它应该类似于“EmployeeImage.url”或类似的名称,而不是“EmployeeImage”或类似的名称,但我不知道正确的名称。当列表中根本不存在字段时,我出现了此错误。但情况可能并非如此。请尝试使用UI填写此列,然后使用rest返回其值,以查看其格式。您是对的,我犯了一个愚蠢的错误。我实际上在前面重命名了该列(例如,从“EmpImage”重命名为“EmployeeImage”)后来忘记了,所以我尝试使用标题而不是原始名称引用该列。在将查询更改为使用正确的名称后,我遇到了另一个更相关的错误:从JSON读取器读取时发现了意外的“PrimitiveValue”节点。应为“StartObject”节点。这进一步加强了我的怀疑n我需要在查询中处理列结构。当检查对同一列表的GET请求的结果时,我可以在结果中看到EmployeeImage属性,它包含两个子属性“Description”和“Url”。但是如何更新它们?