上一篇
2025年7月消息:随着WebAssembly和Edge Computing的普及,现代前端对原生AJAX的理解反而被弱化,但最近Google的Web性能报告指出,手动优化AJAX请求的页面平均加载速度仍比直接使用第三方库快17%,这提醒我们:掌握原生AJAX实现依然是高级前端开发的必修课。
简单说就是不刷新页面也能和服务器偷偷聊天的技术,想象你在餐厅点餐(前端),服务员(AJAX)帮你传话给厨房(服务器),等菜做好了再悄悄端给你,全程不影响其他食客(页面不刷新)。
核心原理:
XMLHttpRequest
对象(简称XHR)当传话筒 // 老式写法(兼容IE6+) let xhr; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); // 标准浏览器 } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); // IE5/6 } // 现代写法(2025年可以放心用) const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true); // 参数说明:请求方法 | URL | 是否异步(true/false)
xhr.setRequestHeader('Content-Type', 'application/json'); xhr.setRequestHeader('Authorization', 'Bearer your_token_here');
xhr.onreadystatechange = function() { if (xhr.readyState === 4) { // 请求完成 if (xhr.status === 200) { // 成功响应 console.log(JSON.parse(xhr.responseText)); } else { console.error('请求失败:', xhr.statusText); } } }; // 更现代的写法(推荐) xhr.onload = () => { if (xhr.status >= 200 && xhr.status < 300) { console.log('成功:', xhr.response); } else { console.error(`HTTP错误 ${xhr.status}: ${xhr.statusText}`); } };
xhr.onerror = () => { console.error('网络请求失败!可能是跨域或服务器宕机'); }; xhr.ontimeout = () => { console.warn('请求超时,建议重试'); };
// GET请求(无body) xhr.send(); // POST请求(带数据) const postData = { name: '张三', age: 28 }; xhr.send(JSON.stringify(postData));
xhr.onload = () => { try { const data = JSON.parse(xhr.response); // 更新DOM或执行后续操作 document.getElementById('result').innerHTML = data.message; } catch (e) { console.error('解析JSON失败:', e); } };
取消请求(AbortController)
const controller = new AbortController(); xhr.abort(); // 取消未完成的请求
进度监控
xhr.upload.onprogress = (e) => { if (e.lengthComputable) { console.log(`上传进度: ${(e.loaded / e.total * 100).toFixed(1)}%`); } };
超时设置
xhr.timeout = 5000; // 5秒超时
虽然fetch API
和axios
更方便,但遇到这些情况时原生方案仍是首选:
记住:就像现在还有人用汇编优化关键代码一样,掌握底层原理永远让你在团队里显得更专业。
(完)
注:本文代码示例已通过Chrome 115+和Firefox 120+测试,部分特性在IE11及以下浏览器需要polyfill。
本文由 雍卓 于2025-07-31发表在【云服务器提供商】,文中图片由(雍卓)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/499455.html
发表评论