第37篇:原生AJAX从零手写源码——彻底弄懂前端网络请求底层
前言在前面章节我们使用过 Fetch、封装过 Promise 请求。但Fetch 是现代API真正前端网络底层根基永远是AJAXXMLHttpRequest。绝大多数新人只会调用接口从来不知道网络请求底层是怎么建立的请求头、响应头如何配置请求状态码、 readyState 到底是什么为什么可以异步不阻塞页面本篇带你从零手写完整原生AJAX源码弄懂前端网络底层吊打面试网络原理题同时为下一篇跨域知识点打下绝对基础。一、AJAX是什么面试满分定义AJAX 是异步的 JavaScript 和 XML核心作用在不刷新页面的情况下与服务器进行异步数据通信。前端所有接口请求底层根源都是 AJAXjQuery.ajax 底层 XMLHttpRequestaxios 底层 XMLHttpRequestFetch 是新规范但底层思想依然是AJAX异步通信二、AJAX 核心五大步骤必背创建请求实例new XMLHttpRequest()初始化请求open(请求方式, 接口地址, 是否异步)监听状态变化onreadystatechange发送请求send()接收响应数据判断状态码、解析数据三、readyState 五状态详解面试必考0未初始化未调用open1请求已建立未发送2请求已发送响应头已返回3正在接收响应数据部分返回4请求彻底完成数据全部接收成功我们真正处理业务逻辑只判断readyState 4四、状态码 status 含义200请求成功404接口地址不存在403权限不足500服务器报错五、手写完整AJAXGET请求完整版// 1. 创建xhr实例 const xhr new XMLHttpRequest(); // 2. 初始化请求方式和地址 // 第三个参数true异步 false同步 xhr.open(GET,https://jsonplaceholder.typicode.com/posts/1,true); // 3. 监听状态变化 xhr.onreadystatechange function(){ // 请求完成 if(xhr.readyState 4){ // 请求成功 if(xhr.status 200){ // 拿到服务器返回数据 console.log(请求成功,JSON.parse(xhr.responseText)); }else{ console.log(请求失败,xhr.status); } } } // 4. 发送请求 xhr.send(null);六、手写POST请求带请求体、请求头const xhr new XMLHttpRequest(); xhr.open(POST,https://xxx.com/api,true); // POST必须手动设置请求头 xhr.setRequestHeader(Content-Type,application/json); xhr.onreadystatechange function(){ if(xhr.readyState 4){ console.log(xhr.status,xhr.responseText); } } // 传递JSON参数 const data JSON.stringify({name:张三,age:18}); xhr.send(data);七、封装Promise版AJAX企业通用把原生AJAX封装成 Promise兼容 async/await对标 axios 底层思想。function ajax(url,methodGET,datanull){ return new Promise((resolve,reject){ const xhr new XMLHttpRequest(); xhr.open(method,url,true); // 设置请求头 xhr.setRequestHeader(Content-Type,application/json); xhr.onreadystatechange function(){ if(xhr.readyState 4){ if(xhr.status 200 xhr.status 300){ resolve(JSON.parse(xhr.responseText)); }else{ reject(请求失败 xhr.status); } } } // 发送数据 xhr.send(data ? JSON.stringify(data) : null); }) } // 使用 ajax(https://jsonplaceholder.typicode.com/posts) .then(resconsole.log(res)) .catch(errconsole.log(err));八、本篇结语学完本篇你不再是只会调用 Fetch、axios 的小白。你真正掌握了前端网络请求底层原理理解请求全过程、状态流转、头部配置、参数传递。所有网络框架万变不离其宗底层全部是 AJAX。下一篇我们攻克前端超级高频痛点跨域问题与全套解决方案彻底解决项目接口报错问题。

相关新闻

北京高新技术软件公司 校园物资申领系统 院校全过程管理开发

北京高新技术软件公司 校园物资申领系统 院校全过程管理开发

一、北京软件定制服务商介绍该项目的开发主体为北京一网天行科技有限公司,于2013年4月在北京市海淀区成立,公司在济南、宿州、西安设有分公司。一网天行具有13年的软件定制开发经验,是国家高新技术企业,证书编号为GR202311008731&…

2026/10/27 5:00:35 阅读更多 →
PARD2-Llama-3.1-8B vs 传统模型:为什么它能超越EAGLE-3达1.9倍性能?

PARD2-Llama-3.1-8B vs 传统模型:为什么它能超越EAGLE-3达1.9倍性能?

PARD2-Llama-3.1-8B vs 传统模型:为什么它能超越EAGLE-3达1.9倍性能? 【免费下载链接】PARD2-Llama-3.1-8B 项目地址: https://ai.gitcode.com/hf_mirrors/amd/PARD2-Llama-3.1-8B PARD2-Llama-3.1-8B是基于Llama3.1-8B架构优化的高性能推理模型…

2026/10/27 5:00:29 阅读更多 →
AI多Agent协作系统实战(十八):让你改PC端你跑去改移动端——AI Agent的“左右不分“综合症

AI多Agent协作系统实战(十八):让你改PC端你跑去改移动端——AI Agent的“左右不分“综合症

系列第18篇 | 同一个class名,两套代码,Agent每次都猜错用户说"改PC端",Agent改了移动端 2026年7月的某天,用户发了条消息:“搜索栏和banner条距离,搜索栏筛选按钮距离,按照资产页的来…

2026/10/24 13:55:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →