好的,我的网址(example.com/api/content/12)按以下格式返回JSON数据:
{
"title" : "My blog post",
"body" : "Body",
"data" : "old"
}
我只想简单地对数据字段进行更改。目前,我正在使用PUT,基本上只是替换整个事物,我意识到这是无效的。像这样:
var data = {
"title" : "My blog post",
"body" : "Body",
"data" : "New data"
}
$.ajax({
url: 'http://example.com/api/content/12',
data: data,
error: function() {
console.log('Error');
},
dataType: 'json',
success: function(data) {
console.log('success');
},
type: 'PUT'
});
如何使用PATCH执行此操作?我不需要发送标题和正文字段,因为它们不会改变。我只是想更新数据字段。
答案 0 :(得分:1)
对于指定的用例,最简单的方法是使用JSON Merge Patch,如下所示:
var patch = {
"data" : "New data"
}
$.ajax({
type: 'PATCH',
url: 'http://example.com/api/content/12',
data: JSON.stringify(patch),
processData: false,
contentType: 'application/merge-patch+json',
/* success and error handling omitted for brevity */
});
processData: false
和data: JSON.stringify(patch)
会覆盖jQuery的PATCH默认序列化(不是JSON)并强制进行JSON序列化。
请注意,JSON Merge Patch具有固有的局限性(例如,您无法仅更新数组中的某些元素,无法将键设置为null
等),因此对于更复杂的实现,我会鼓励OP考虑JSON Patch:
var patch = [
{ "op": "replace", "path": "/data", "value": "New data" },
]
$.ajax({
type: 'PATCH',
url: 'http://example.com/api/content/12',
data: JSON.stringify(patch),
processData: false,
contentType: 'application/json-patch+json',
/* success and error handling omitted for brevity */
});