【发布时间】:2020-09-06 03:13:06
【问题描述】:
我不知道如何以优雅的方式对数组参数进行 URL 编码,以便将 XHR 请求从我的 Vue.js 客户端发送到我的 Symfony PHP API。
例如我有这个 GET 方法端点:
- /question/list?subjects={idSubject}
它列出了 Question 实体项,并且可以选择接受参数以按它们过滤结果(在本例中为主题)
想要的应该是:
- /question/list?subjects[]={idSubject}&subjects[]={idSubject}
我正在使用 Axios for Vue.js 来执行 XHR 请求,并且我创建了一个实现我想要的方法的主类。
由于 get() 方法不支持配置对象中的“数据”属性,我以与 POST 调用相同的方式实现它,然后我对其进行处理以构建所需的 URL。
这是我的 Ajax.js 文件:
const ajaxRequest = (config) => {
const token = TokenStorage.get()
config.baseURL = '/ajax'
if (token) {
config.headers = {
'Authorization': 'Bearer ' + token
}
}
return Axios.request(config)
}
const Ajax = {
get: (endpoint, params = null, config = {}) => {
const querystring = require('querystring')
let url = endpoint
if (Array.isArray(params) && params.length) {
url += '?' + params.join('&')
} else if (typeof params === 'object' && params !== null && Object.keys(params).length) {
url += '?' + querystring.stringify(params)
}
config = {
...config,
...{
url: url,
method: 'get'
}
}
return ajaxRequest(config)
},
post: (endpoint, params, config = {}) => {
config = {
...config,
...{
url: endpoint,
method: 'post',
data: params
}
}
return ajaxRequest(config)
}
}
我知道我可以通过 POST 传递这些数据,但是为了遵循安静的设计,我想保留 GET 方法,并且可选参数可以作为 GET 参数包含在 URL 中。
【问题讨论】:
标签: javascript arrays xmlhttprequest axios urlencode