上一篇
场景还原:
小张正在赶工一个电商项目,突然用户反馈"加入购物车按钮点了没反应!" 😱 打开控制台一看,满屏的红色错误:status: 500
、Network Error
... 这时候如果不懂AJAX错误处理,就只能对着屏幕干瞪眼,别慌!今天咱们就手把手拆解这些让人头大的错误码!
success/error
回调(jQuery风格)$.ajax({ url: "/api/add-to-cart", success: function(data) { console.log("🎉 成功啦:", data); }, error: function(jqXHR, textStatus, errorThrown) { console.log("💥 翻车了:", textStatus, errorThrown); } });
try/catch
+ async/await
(现代写法)async function addToCart() { try { const response = await fetch("/api/add-to-cart"); if (!response.ok) throw new Error(response.statusText); console.log("🎯 数据获取成功:", await response.json()); } catch (err) { console.log("🚨 捕获异常:", err.message); } }
状态码 | 含义 | 典型场景 |
---|---|---|
400 |
请求语法错误 | 提交的JSON字段缺失或格式不对 |
401 |
未授权 | 用户未登录时访问需要权限的接口 |
403 |
禁止访问 | 普通用户尝试访问管理员接口 |
404 |
接口不存在 | 后端路由写错了/前端请求路径错误 |
500 |
服务器内部错误 | 后端代码抛出未处理的异常 |
502 |
网关错误 | Nginx配置有问题或后端服务挂了 |
504 |
网关超时 | 后端响应时间超过Nginx等待阈值 |
小技巧:
4xx
开头的错误通常是前端背锅(但别急着承认 😏) 5xx
开头的错误可以理直气壮找后端同事 error: function(jqXHR, textStatus, errorThrown) { // jqXHR:增强版的XMLHttpRequest对象 console.log("HTTP状态码:", jqXHR.status); // 比如404 console.log("状态文本:", jqXHR.statusText); // quot;Not Found" // textStatus:概括性错误描述 // 可能是 "timeout", "error", "abort"等 // errorThrown:捕获的异常对象 console.log(errorThrown instanceof Error); // true }
catch(err) { // 网络错误会直接抛出TypeError if (err instanceof TypeError) { console.log("🌐 网络异常:", err.message); } // 手动检查HTTP状态码 if (err.response?.status === 401) { alert("请先登录!"); } }
function handleError(error) { if (error.response) { // 有响应但状态码不对 switch (error.response.status) { case 401: redirectToLogin(); break; case 429: showToast("操作太频繁啦,稍后再试~"); break; default: console.error(`[${error.response.status}]`, error.config.url); } } else if (error.request) { // 请求已发出但没收到响应 showNetworkErrorModal(); } else { // 其他诡异错误 logToSentry(error); // 上报监控系统 } }
async function fetchWithRetry(url, retries = 3) { try { const controller = new AbortController(); setTimeout(() => controller.abort(), 5000); const response = await fetch(url, { signal: controller.signal }); return response.json(); } catch (err) { if (retries > 0) { console.log(`🔄 第${4-retries}次重试...`); return fetchWithRetry(url, retries - 1); } throw new Error("重试次数耗尽"); } }
CORS问题:
No 'Access-Control-Allow-Origin'
错误时 CSRF防护:
403 Forbidden
X-CSRF-Token
请求头 数据格式问题:
.text()
先打印原始数据看看是不是非JSON格式 :
处理AJAX错误就像当程序员界的侦探 🕵️♂️,需要:
1️⃣ 看懂错误码背后的含义
2️⃣ 利用错误对象中的详细信息
3️⃣ 给用户友好的提示(别直接扔技术术语!)
下次再遇到红色报错时,希望你能淡定地端起咖啡说:"小问题,看我的!" ☕
(本文技术要点更新至2025年8月)
本文由 亥蕴涵 于2025-08-01发表在【云服务器提供商】,文中图片由(亥蕴涵)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/508940.html
发表评论