使用 Ajax 更新特定对象中单个字段的正确方法

Posted

技术标签:

【中文标题】使用 Ajax 更新特定对象中单个字段的正确方法【英文标题】:The right way to use Ajax to Update a Single field in a specific Object 【发布时间】:2019-05-15 01:00:09 【问题描述】:

是否可以使用 Ajax 更新特定对象中的单个字段? 我有一个包含大量记录的 postgres 表,我想使用 jquery Ajax 请求来更新该表中特定对象中的单个字段。可以在不替换或重新发布整个记录的情况下完成吗?

我想要这个(给我一个 400 bad request 错误):

$.ajax(
    type: "POST",
    url: '/api/MyEndPoint/',
    data: 
        id: Specific_Record,
        Field_To_Update: New_Value, 
    , 
    success: function(data)
        console.log( 'success, server says '+data);  
    
);

而不是这个(有效):

$.ajax(
    type: "POST",
    url: '/api/MyEndPoint/',
    data: 
        id: Specific_Record,
        Field_To_Update: New_Value, 
        Field1: SameAsBefore, 
        Field2: SameAsBefore,  
        Field3: SameAsBefore,  
        ...  
        Field16: SameAsBefore, 
    , 
    success: function(data)
        console.log( 'success, server says '+data);  
    
);

*注意:我使用的是 Django,可以轻松地在 views.py 中进行此更新,但我想使用 javascript 来避免页面刷新。

由于我也在使用 Django Rest Framework,创建一个特定于我要更新的字段的新端点对我来说会更好吗?例如:/api/DB_Table/Object_id/Field_to_Update

谢谢!

【问题讨论】:

是的,你可以这样做 - 它需要在你的服务器中处理 在您的路线上设置 PUT 方法以进行更新 当然!这太明显了,我应该知道的。我将让 Ajax ping 端点,并在我的 views.py 文件(处理端点逻辑的位置)中让 python 更新特定对象中的单个字段。感谢您在我的大脑放屁期间的帮助:) @charlietfl 实际上是 PATCH 而不是 PUT 【参考方案1】:

我认为您可以以最简单的形式使用 Django RestFramework 库提供的 RetrieveUpdateAPIView 通用视图

这将公开以下 api:

GET : Return 对象

PATCH : Update 对象数据(partially,按照惯例)

PUT : Update 对象数据

参考:https://www.django-rest-framework.org/api-guide/generic-views/#retrieveupdateapiview

如果你也想support deleting对象,那么你可以使用RetrieveUpdateDestroyAPIView,这将支持DELETE删除对象

参考:https://www.django-rest-framework.org/api-guide/generic-views/#retrieveupdatedestroyapiview

【讨论】:

【参考方案2】:

是的,您可以使用 PATCH HTTP 方法执行此操作,它在 REST 术语中称为 部分更新。它已经在 DRF 中默认实现,因此您不必为此重写任何方法。这与 PUT 完全相反,它是一个完整的更新,除非您覆盖默认行为,否则将要求您将所有必填字段添加到请求中

【讨论】:

以上是关于使用 Ajax 更新特定对象中单个字段的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 node.js 从实时 json 数据中提取特定字段来创建新的单个 json 对象

Django:使用forms.py更新现有模型中的单个字段

ajax 选择 HTML 的特定部分

使用 datepicker jquery ajax php 更新 mysql 数据库字段

在休眠中更新对象的字段

ReactJS:仅更新嵌套状态对象中的特定字段[重复]