请使用原生 JavaScript 中的 XMLHttpRequest 对象编写一段代码,实现一个 AJAX 请求并处理响应,请问具体实现步骤和代码是什么?
考察说明
考查候选人基于 XMLHttpRequest 实现 AJAX 请求的编码能力及对异步处理细节的掌握。
回答思路
- 【回答框架 1】XMLHttpRequest 是浏览器内置对象,用于在后台与服务器交换数据。核心步骤包括:创建实例、配置请求、设置回调、发送请求。
- 【回答框架 2】创建实例:使用 new XMLHttpRequest() 生成 xhr 对象。配置请求:调用 xhr.open(method, url, async) 设置请求方法、URL 和是否异步,通常 async 为 true。
- 【回答框架 3】设置回调:监听 xhr.onreadystatechange 事件,当 readyState 变化时触发;通常判断 readyState === 4(请求完成)且 status 为 2xx 或 304 时处理响应,通过 xhr.responseText 获取返回内容。
- 【回答框架 4】发送请求:调用 xhr.send(),对于 GET 请求参数放在 URL 中,对于 POST 请求需设置请求头 Content-Type 并在 send 中传递数据。
- 【回答框架 5】处理异常:可监听 xhr.onerror 处理网络错误,并注意超时设置(xhr.timeout)和取消请求(xhr.abort())以增强健壮性。
- 【关键点 1】创建 XHR 实例后,open 方法配置请求方法、URL 和异步标志。
- 【关键点 2】onreadystatechange 中检查 readyState 为 4 且 status 为 2xx 或 304 后处理响应。
- 【关键点 3】GET 与 POST 的发送参数位置不同,POST 需设置 Content-Type 并传递请求体。
- 【易错点 1】未检查 readyState 和 status 就直接使用响应,易因状态不完整导致错误。
- 【易错点 2】忽略异步标志(async=false)会阻塞主线程,降低用户体验并可能引发浏览器警告。
- 【易错点 3】未处理网络错误和超时,导致请求失败时无法及时发现。