场景引入:
凌晨3点,你盯着屏幕上的报错信息 Uncaught TypeError: Cannot read properties of undefined
,咖啡已经续了第三杯——这又是一个因为AJAX请求格式不对导致数据解析失败的夜晚,别慌!今天我们就用最直白的方式,拆解AJAX和JSON这对"黄金搭档"。
const xhr = new XMLHttpRequest(); xhr.open('GET', '/api/data', true); // true表示异步 xhr.onload = function() { if (xhr.status === 200) { console.log(JSON.parse(xhr.responseText)); // 记得解析JSON! } }; xhr.send();
特点:兼容性王者,但代码像老太太的裹脚布——又臭又长。
fetch('/api/data') .then(response => response.json()) // 直接转JSON .then(data => console.log(data)) .catch(error => console.error('请求失败:', error));
优势:Promise链式调用,代码更优雅,但注意:默认不会拒绝HTTP错误状态(如404)!
axios.get('/api/data') .then(response => console.log(response.data)) .catch(error => console.error('出错了:', error));
亮点:自动JSON解析、错误处理更智能,还支持拦截器(Interceptor)这种黑科技。
$.ajax({ url: '/api/data', method: 'GET', success: function(data) { console.log(data); }, error: function(xhr) { console.log('状态码:', xhr.status); } });
现状:随着jQuery的没落,逐渐退出主流,但老项目里依然常见。
❌ 错误示范:{ name: '张三', age: 25 }
✅ 正确姿势:{ "name": "张三", "age": 25 }
为什么:JSON规范只认双引号,单引号会导致解析失败!
// 使用Fetch时需显式设置 fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' // 告诉后端这是JSON }, body: JSON.stringify({ key: 'value' }) // 对象转字符串 });
常见坑点:忘记JSON.stringify()
直接传对象,后端会收到[object Object]
这种神秘代码。
假设接口返回:
{ "user": { "profile": { "address": { "city": "北京" } } } }
安全访问方式:
// 可选链操作符(?.)防止报错 const city = data.user?.profile?.address?.city || '默认城市';
CORS跨域问题:
Access-Control-Allow-Origin
时间格式处理:
// 后端返回ISO时间字符串时 const date = new Date('2025-07-15T00:00:00Z'); console.log(date.toLocaleDateString()); // 2025/7/15
大文件传输优化:
FormData
分片上传 Blob
对象减少内存占用 根据2025年前端生态调研:
JSON.parse(text, reviver)
实现自定义解析逻辑 :
AJAX和JSON就像螺蛳粉和酸笋——分开也能用,但搭配才是灵魂!记住这三个要点:
1️⃣ 选对请求工具(推荐Fetch/axios)
2️⃣ 严格遵循JSON格式规范
3️⃣ 头(Headers)体(Body)一致才和谐
你可以关掉这篇文章,去征服那些顽固的API接口了! 💪
本文由 殳香桃 于2025-07-30发表在【云服务器提供商】,文中图片由(殳香桃)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/480184.html
发表评论