使用Axios发送FormData传递筛选条件,返回结果无筛选数据怎么办?
Axios发送GET请求带FormData无筛选结果的解决方案
核心问题
HTTP规范里,GET请求不存在请求体,Axios会直接忽略GET请求配置中的data字段,导致你设置的filtro_grafica参数根本没发送到服务器。而Postman或其他请求库做了兼容处理(比如自动把FormData转成URL查询参数),所以能正常生效。
修复方案
方案1:转为URL查询参数(推荐,符合HTTP规范)
把FormData里的参数放到Axios的params字段中,Axios会自动拼接成URL查询字符串发送:
const axios = require('axios'); let config = { method: 'get', url: 'https://thisismyurl/filter', headers: { 'Authorization': 'JWT MYTOKEN' }, params: { filtro_grafica: '2,0,0,0' } }; axios(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); });
方案2:改用POST请求(若服务器支持)
如果服务器原本就支持通过POST接收FormData参数,直接修改请求方法即可:
const axios = require('axios'); const FormData = require('form-data'); let data = new FormData(); data.append('filtro_grafica', '2,0,0,0'); let config = { method: 'post', url: 'https://thisismyurl/filter', headers: { 'Authorization': 'JWT MYTOKEN', ...data.getHeaders() }, data : data }; axios(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); });
为什么Postman能正常工作?
Postman处理GET请求的FormData时,会自动将其转换为URL查询参数发送,相当于替你完成了方案1的操作;而Axios严格遵循HTTP标准,不会自动转换,所以导致参数丢失。
内容的提问来源于stack exchange,提问作者Carlos Daniel Ospina Salazar
相关产品推荐
相关产品推荐

