是否有通过查询字符串传递数组的标准方法?
明确起见,我有一个具有多个值的查询字符串,其中一个值将是数组值。我希望查询字符串值被视为数组-我不希望数组被分解,以便它与其他查询字符串变量难以区分。
另外,根据这篇文章的回答,作者建议不定义对数组的查询字符串支持。这准确吗?
编辑:
基于@Alex的回答,没有标准的方法来做到这一点,所以我的后续是什么是一个简单的方法来识别我正在阅读的参数是一个数组在PHP和Javascript?
将多个参数命名为相同的名称是否可以接受,这样我就知道它们属于一个数组?例子:
?myarray=value1&myarray=value2&myarray=value3...
或者这是一种不好的做法?
虽然URL部分没有标准,但JavaScript或多或少有一个标准。
数组。方法返回以逗号分隔的项目字符串。
因此,如果你将包含数组的对象传递给URLSearchParams,并对其调用toString(),它将反过来对每个值调用toString,结果如下所示:
let data = {
name: 'abc',
values: ['abc', 123]
}
new URLSearchParams(data).toString();
// ?name=abc&values=abc,123 (with escaped comma characters)
这种格式很容易在前端序列化,也很容易在任何服务器上解析,而且无论上下文如何都很容易理解,所以它往往是我在url中发送数组数据的首选。
这对我来说很管用:
在link中,to属性具有值:
to="/filter/arr?fruits=apple&fruits=banana"
Route可以处理这个:
path="/filter/:arr"
对于多个数组:
to="filter/arr?fruits=apple&fruits=banana&vegetables=potato&vegetables=onion"
路线不变。
截图
更新:
为了实现这种字符串结构,query-string是最好的包。
例如:
import { stringify, parse } from 'query-string';
const queryParams={
fruits:['apple','banana'],
vegetables:['potato','onion']
}
//arrayFormat can be bracket or comma
stringify(queryParams, { arrayFormat: 'bracket' });