大家在做编辑的时候,怎么提交表单? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wbj726
V2EX    程序员

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

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

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

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

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

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

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

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

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

    后台根据 fields 更新。
    walpurgis
        14
    walpurgis  
       2022 年 6 月 17 日 via iPhone
    才 30 个,全量省事
    adimn
        15
    adimn  
       2022 年 6 月 18 日
    全量更新,前端省事后端也省事,如果不全量增量,后端 model 接收 为 null 的参数时,到底是制空 还是没修改不传,让人头大
    chaoFanExcellent
        16
    chaoFanExcellent  
       2022 年 6 月 18 日
    我也很疑问,到底是传修改的还是传全部的,我是想省事直接传全部,后端他想让传更新的,不知道哪个更好。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2858 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 11:44 PVG 19:44 LAX 04:44 JFK 07:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86