jquery - 使用 JQuery PATCH 进行部分更新

标签 jquery json ajax rest http

好的,我的 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: falsedata: 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/

相关文章:

javascript - 打开的 JqueryUI 对话框使用旧目标实例处理 onclick 事件

javascript - 根据 x 和 y 坐标获取表格单元格的值

php - 检查ajax文件上传中的错误

javascript - 来自服务器的响应未显示在 Select2 下拉列表中

javascript - AJAX POST 成功但没有执行任何操作

javascript - 在弹出窗口中打开部分 View

javascript - Phonegap RSS 提要,Javascript

json - 在Logstash中过滤JSON/非JSON条目

javascript - 解析流式 JSON 并处理 "invalid"错误(使用 Oboe.js)

PHP+AJAX发送数据(链接)麻烦