V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wbj726
V2EX  ›  程序员

大家在做编辑的时候,怎么提交表单?

  •  
  •   wbj726 · 2022-06-17 17:02:31 +08:00 · 1918 次点击
    这是一个创建于 650 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问下大神,假如如果有一个需求,一个 form 表单,有 30 个字段,并且对数据要求特别严格不能出现问题。而大家在做编辑的时候,是把整个表单都提交给后台呢,还是只把做了修改的字段提交到后台呢?

    1.如果把整个表单都提交到后台,那 update 的时候会不会整个表单的数据都 update 一遍?这样会不会增加数据错误的风险呢?在提交传输过程中会不会由于某种原因,导致数据出现问题,而把其他的字段给更新成不正确的呢?

    2.如果只更新被修改过的字段,那怎么判断那些字段被修改了,那些字段没有被修改。从而精确的提交修改后的字段到后台呢?
    16 条回复    2022-06-18 13:45:58 +08:00
    yangxiezi
        1
    yangxiezi  
       2022-06-17 17:08:52 +08:00
    watch 数据监听啊
    devswork
        2
    devswork  
       2022-06-17 17:10:46 +08:00
    我们这就是把所有字段一次性提交到后端。
    update 不会增加数据错误风险吧,只要值正确,写到数据库还能出什么问题呢?
    提交数据怕有问题,那么就做前后端校验,根据一定规则计算文本特征值,然后后端用同样算法算一遍,比对特征值,不就可以保证一致了。
    如果你只想提交被修改的字段,那么前端检测值变化就行(使用监听值变化的函数),一旦变化,则值和字段名就成对提交,后端来解析提交的格式然后 update 就好了。
    wu67
        3
    wu67  
       2022-06-17 17:23:38 +08:00
    我只想说, 前端的校验只是防止一般用户输入意外的数据, 后端的校验才是真正的安全校验.
    至于增量还是全量提交, 看团队规范就行, 一般都是全量吧?
    ningmengshule
        4
    ningmengshule  
       2022-06-17 17:28:26 +08:00
    只提交修改部分就行了。后端对此的处理逻辑是:先根据 ID 查出数据库中的该记录的所有字段值,然后将前端传递过来的字段值覆盖(没传的字段不进行覆盖)。然后再将该记录整个更新到数据库
    libook
        5
    libook  
       2022-06-17 17:30:29 +08:00
    经过严格的测试和校验之后,理论上不应该出现修改部分字段全量提交却让未修改的字段的值变化,这个问题不处理妥当,局部提交也会有问题。

    顶多会出现因字段太多,用户操作的时候手误碰到了不想改的字段,然后就提交写入了,这个得产品经理和 UE 去优化的。
    Geekerstar
        6
    Geekerstar  
       2022-06-17 17:36:06 +08:00
    我们这是全部,前端好像不好判断哪些修改了
    RuiQ
        7
    RuiQ  
       2022-06-17 17:38:29 +08:00
    第一个问题看场景和需求吧。
    全量提交和部分提交考虑到的点:
    1. 如果多人修改,全量提交是最后一个人的本地数据为准,也就是说最后一个人看到的即最后落库的数据。如果部分提交,可能造成表单提交后发现有人同时修改了别的字段,看业务是否有这方面的一些考虑。
    2.全部提交,如果字段非常多,而且有很复杂的校验(指后端),可能会有对性能的考虑,要评估下。

    第二个问题,我前端不太专业,但是也写过,表单中的数据是否修改是可以监听到的。
    nzbin
        8
    nzbin  
       2022-06-17 17:41:29 +08:00
    angular 响应式表单一把梭,每个 field 都会被标记比如是否 dirty ,是否 touched ,所以无论 1 还是 2 都很简单
    kop1989smurf
        9
    kop1989smurf  
       2022-06-17 17:43:54 +08:00
    理想情况下,在业务角度来看,全量更新和增量更新是一致的。

    如果全量更新和增量更新会导致差异,那其实是要么你的业务流程梳理的不正确(比如缺乏锁单机制导致单据信息回滚,紊乱),要么是你的表单逻辑不正确(比如明明是修改界面,但是提交部分字段之后会导致次生的数据变化)。

    考虑增量只是一个技术问题,而非业务问题。
    wolfie
        10
    wolfie  
       2022-06-17 17:44:48 +08:00
    @Geekerstar
    后端才没法判断,前端可以判断。
    Jooooooooo
        11
    Jooooooooo  
       2022-06-17 17:45:05 +08:00
    全量更新呀.
    taest
        12
    taest  
       2022-06-17 18:07:49 +08:00
    后端可以增量
    Chad0000
        13
    Chad0000  
       2022-06-17 18:24:03 +08:00 via iPhone
    我的是前端做了组件,需要默认是查看模式,需要编辑哪个字段移到相应位置会出现编辑按钮,然后组件负责将改变的提交上去,同时提交编辑的字段列表。类似这样:

    a:123
    b:“abc”
    fields:[“a”,“b”]

    后台根据 fields 更新。
    walpurgis
        14
    walpurgis  
       2022-06-17 18:33:27 +08:00 via iPhone
    才 30 个,全量省事
    ma836323493
        15
    ma836323493  
       2022-06-18 09:06:41 +08:00
    全量更新,前端省事后端也省事,如果不全量增量,后端 model 接收 为 null 的参数时,到底是制空 还是没修改不传,让人头大
    chaoFanExcellent
        16
    chaoFanExcellent  
       2022-06-18 13:45:58 +08:00
    我也很疑问,到底是传修改的还是传全部的,我是想省事直接传全部,后端他想让传更新的,不知道哪个更好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1179 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:19 · PVG 02:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.