上一篇
"这接口怎么又报错了?!" 办公室里传来程序员小张的怒吼,他盯着控制台里那个刺眼的400 Bad Request
,第8次尝试修改Ajax请求参数。"明明后端说参数格式没问题啊..." 这种场景你是不是也经历过?🤯
别急!今天我们就来彻底搞懂Ajax参数传递的那些门道,让你从此告别参数传递的玄学调试!
Ajax请求的参数主要存在于三个位置:
/api/user?id=123
(问号后的部分) Content-Type
、Authorization
等元信息 // 经典jQuery Ajax示例 $.ajax({ url: '/api/data?id=123', // URL参数 headers: { 'Token': 'abc' }, // 请求头参数 data: { name: '张三' }, // 请求体参数 method: 'POST' });
URL参数:需要encodeURIComponent
转义
// 错误示范 ❌ let search = 'vue react'; `api/search?q=${search}` // 空格会引发问题 // 正确做法 ✅ `api/search?q=${encodeURIComponent(search)}`
JSON body:需设置Content-Type: application/json
Form Data:需设置Content-Type: multipart/form-data
使用FormData
对象处理文件上传:
const form = new FormData(); form.append('avatar', fileInput.files[0]); form.append('username', '前端大神'); axios.post('/upload', form, { headers: { 'Content-Type': 'multipart/form-data' } });
处理查询字符串的现代API:
const params = new URLSearchParams(); params.append('page', 1); params.append('size', 20); fetch(`/api/list?${params}`); // 自动处理编码 → /api/list?page=1&size=20
// 日期处理推荐方案 const params = { start: new Date().toISOString(), // 转ISO格式 end: moment().add(1, 'day').toJSON() // 使用moment.js };
GET请求带body:某些浏览器直接忽略
嵌套对象参数:需要约定序列化方式
// 错误 ❌ { filter: { name: 'Alice', age: 25 } } // 解决方案 ✅ { 'filter[name]': 'Alice', 'filter[age]': 25 } // 后端需支持
数组参数:ids=1&ids=2
vs ids[]=1&ids[]=2
// axios全局配置示例 axios.defaults.headers.common['X-CSRF-TOKEN'] = csrfToken;
// 带超时控制的fetch async function fetchWithTimeout(url, options = {}, timeout = 5000) { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeout); const response = await fetch(url, { ...options, signal: controller.signal }); clearTimeout(timer); return response; }
// 请求参数统一处理 axios.interceptors.request.use(config => { config.params = { ...config.params, _t: Date.now() // 防止缓存 }; return config; });
✅ URL参数:简单数据,记得编码
✅ Body参数:复杂数据,注意Content-Type
✅ Header参数:认证/元信息专用通道
✅ 现代API:善用URLSearchParams
和FormData
当你的同事再为Ajax参数抓狂时,你可以优雅地甩出这篇文章:"参数传递?So easy啦~" 😎
(本文技术要点更新至2025年7月主流浏览器和框架版本)
本文由 德昊穹 于2025-07-31发表在【云服务器提供商】,文中图片由(德昊穹)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/497530.html
发表评论