世纪话题Get参数传数组

哎呀,这个话题,其实挺简单的,但是仔细想起来,URL的请求参数如下,如果要写数组怎么办?

a=1&b=2&c=3

其实无非是解析这个字符串,但是由于没有标准方案,所以大家的处理方法五花八门。我遇到过的方式如下

数组标识

a[1]=1&a[2]=2

或者

a[]=1&a[]=2

这种做法,jquery时代很多,可以很简单分辨出数组,但是取到数据的时候要单独处理key,因为直接取到的值是a[]

序列化

a=%5B1%2C2%5D

少说废话,直接stringify,然后发现URL里面要转义的东西太多了,然后后端取到值还要parse下,因为传来个字符串

分隔符分割

a=1%2C2

莫不如加个,处理下?缺点,找错分隔符的话还是要处理转义,后端还是要单独split下

其实有标准的

根据URLSearchParam

a=1&a=2

如此生成的URLSearchParam对象(类似于Map对象),直接调用get('a')方法只会取到一个值,但是执行getAll('a')可以获取到数组

既然是标准,koa的koa-qs也是这么处理数组的。

另外URLSearchParam还有一定容错能力,所以即使url被浏览器截断(其实不太会,因为此时报错414)也不会有太大问题。