好的,我的 URL(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 执行此操作?我真的不需要发送标题和正文字段,因为它们不会改变。我只想更新数据字段。
最佳答案
对于指定的用例,最简单的方法是使用 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 */
});
关于jquery - 使用 JQuery PATCH 进行部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38945677/