Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

不该用空字符串表示空值

  很多表单设计都是直接把整个表单的所有字段都丢出来的,对于可选和必选参数的区分只是在显示上做一些特殊处理而已。点击提交按钮给后端发送的是整个完整的表单,没填的项目都是空字符串。对于这种情况,后端就要做这件恶心的事情,那就是把字符串当做空值来过滤掉。
  有时候空字符串和空值会影响到业务逻辑,如果处理不好很容易出 Bug。其实这是前端的锅,前端在控件设计时就不该只放一个文本框。对于可选字段的设计应该是能够区分出空字符串和空值的。比如使用一个 checkbox 来控制文本框是否需要。又或者判断文本框是否有编辑过,如果编辑过就在后面加一个清除按钮来重新置为空。
  但是这里还有一个很容易被忽略的概念,允许空字符串和允许空。有些数据是允许空字符串的,实际上它们严格意义上来说是必填的,只不过值可以是空字符串,最终入库的也是空字符串。可是对于用户而言,这个项那是可以不填任何东西的,所以可以视为是一个选填的项。所以有时候即便一些字段对于开发者而言是必填的,我们还是会给用户提示这是一个选填的东西。毕竟猴子与人类的思维方式不一样嘛。
  其实大多数表单字段都不会严格到需要区分空和空字符串这么细的情况,所以很多开发者直接把这两者混用也不觉得有什么问题。而且一些前端框架也会带来问题。比如 Angular 的 ng-model 默认是空的,一旦文本框填写过后再删除掉就变成空字符串了。虽然这是交互细节上的 Bug,但就是总有人能够发现并提出这些问题。
  最后建议大家使用 application/json 来传输表单,因为 json 是有类型的,它支持 null 值。而 application/x-www-form-urlencoded 就完全是字符串,传到服务器后服务器还要猜到底是个什么,猜着猜着就猜出问题来了。
网名:
54.146.176.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^