原生Ajax技术介绍与代码解析
一、Ajax核心概念
Ajax(Asynchronous JavaScript and XML)是一种异步通信技术,允许浏览器在不刷新页面的情况下与服务器交换数据。其核心优势在于:
- 异步交互:主线程和网络请求可以并行执行
- 局部更新:仅更新页面指定区域
- 响应式体验:避免页面闪烁
二、原生Ajax实现步骤
1 2 3 4 5
| graph TD A[创建XMLHttpRequest对象] --> B[配置请求参数] B --> C[发送请求] C --> D[监听状态变化] D --> E[处理响应数据]
|
三、代码优化解析(基于一言API示例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>名言获取器</title> <style> #fetchBtn { padding: 12px 24px; background: #4a6fa5; color: white; border: none; border-radius: 4px; cursor: pointer; transition: background 0.3s; } #fetchBtn:hover { background: #3a5a80; }
#resultContainer { margin-top: 20px; padding: 15px; border-left: 4px solid #4a6fa5; background: #f8f9fa; } </style> </head> <body> <button id="fetchBtn">获取</button> <div id="resultContainer">等待获取内容...</div>
<script> document.addEventListener("DOMContentLoaded", () => { const btn = document.getElementById("fetchBtn"); const container = document.getElementById("resultContainer");
btn.addEventListener("click", () => { const xhr = new XMLHttpRequest();
xhr.open("GET", `https://v1.hitokoto.cn/?t=${Date.now()}`, true);
xhr.responseType = "json";
xhr.send();
xhr.addEventListener("load", () => { if (xhr.status === 200) { const data = xhr.response; container.innerHTML = ` <blockquote>${data.hitokoto}</blockquote> <p>—— ${data.from || "未知来源"}</p> `; } else { container.textContent = `请求失败:HTTP ${xhr.status}`; } });
xhr.addEventListener("error", () => { container.textContent = "网络连接异常"; }); }); }); </script> </body> </html>
|

四、原生Ajax核心对象方法
| 方法/属性 |
作用 |
示例 |
open(method, url) |
初始化请求 |
xhr.open('GET', url) |
send([body]) |
发送请求 |
xhr.send() |
responseType |
设置响应数据类型 |
xhr.responseType='json' |
status |
HTTP状态码 |
if(xhr.status===200) |
response |
响应主体(根据responseType) |
xhr.response.hitokoto |
最佳实践建议:
- 始终添加
error事件监听处理网络异常
- 对于JSON API优先设置
responseType='json'
- 使用
DOMContentLoaded替代load事件加快交互绑定
- 重要操作添加加载状态提示(如按钮禁用+加载动画)
此实现完整展示了原生Ajax的核心技术栈,后续会向大家展示一些Ajax封装库用法。