当前位置: 首页 > news >正文

15. xhr 对象如何发起一个请求

总结

  • XMLHttpRequest(简称 XHR)是浏览器提供的用于发送 HTTP 请求的 JavaScript 对象。
  • 常用于实现 AJAX 请求,实现页面局部刷新或与后端进行数据交互。
  • 基本流程包括:创建对象、配置请求、设置回调、发送请求。
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.baidu.com");
xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {}
};
xhr.send();

使用步骤详解

1. 创建 XMLHttpRequest 实例

var xhr = new XMLHttpRequest();

2. 配置请求方式和 URL

使用 open() 方法配置请求类型、URL 和是否异步。

xhr.open("GET", "http://www.baidu.com", true);

参数说明:

  • 'GET':请求方法,也可以是 POSTPUT 等。
  • 'http://www.baidu.com':请求的目标 URL。
  • true:是否异步,默认为 true

3. 设置状态变化回调函数

通过 onreadystatechange 监听请求状态变化:

xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {console.log(xhr.responseText); // 请求成功返回的数据}
};
  • readyState === 4 表示请求已完成。
  • status === 200 表示响应状态码为成功。

4. 发送请求

xhr.send();

如果是 POST 请求,可以在 send() 中传入请求体:

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("name=value&name2=value2");

完整示例(GET 请求)

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true);
xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {console.log("响应数据:", xhr.responseText);}
};
xhr.send();

完整示例(POST 请求)

var xhr = new XMLHttpRequest();
xhr.open("POST", "https://api.example.com/submit", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {console.log("提交结果:", xhr.responseText);}
};
xhr.send("username=test&password=123456");

注意事项

  • 需处理跨域问题(CORS),服务器需设置合适的响应头。
  • 需处理错误状态,如 [status](file://d:\Code\Gitee\video-project\node\routes\dept\controller.js#L171-L190) 不为 2xx 的情况。
  • 推荐使用 fetch 或第三方库(如 Axios)替代 XMLHttpRequest,代码更简洁易维护。

readyState 状态码说明

readyState状态描述
0未初始化,尚未调用 open() 方法
1已打开,已调用 open() 方法,尚未调用 send()
2已发送,已接收到响应头
3接收中,正在下载响应体
4完成,响应内容已完成下载

HTTP 状态码简要

状态码含义
200请求成功
404资源未找到
500服务器内部错误
403禁止访问
401未授权
http://www.dtcms.com/a/325759.html

相关文章:

  • VSCode右键菜单消失,修复VSCode右键菜单
  • raid10 允许最多坏几块磁盘,如何修复阵列?
  • lesson35:数据库深度解析:从概念到MySQL实战学习指南
  • 如何使用 Watchtower 实现定时更新 docker 中的镜像并自动更新容器(附 schedule 的参数详细解释)
  • 升级 ChatGPT 提示“您的银行卡被拒绝了”或者“您的信用卡被拒绝了。请尝试用借记卡支付。“如何解决?
  • FPGA+护理:跨学科发展的探索(二)
  • CVPR 2025 | 即插即用,极简数据蒸馏,速度up20倍,GPU占用仅2G
  • 【数字图像处理系列笔记】Ch09:特征提取与表示
  • YOLOv8 训练报错:PyTorch 2.6+ 模型加载兼容性问题解决
  • GPT-5 现已上线 DigitalOcean Gradient™ AI 平台!
  • 数据大集网:精准获客新引擎,助力中小企业突破推广困局
  • UKB-GWAS资源更新
  • C++ 检测 IPv4 和 IPv6 地址合法性
  • 朝花夕拾(一)-------布尔掩码(Boolean Mask)是什么?
  • npm install报错~[master] npm install npm error code ERESOLVE npm err
  • Redis 数据倾斜
  • 触想定制化工业一体机化身渔业预警终端,守望渔船安全
  • 验证二叉搜索树
  • (Arxiv-2025)Phantom:通过跨模态对齐实现主体一致性视频生成
  • 如何安装 Git (windows/mac/linux)
  • CodeBuddy IDE完全食用手册:从安装到生产力爆发的技术流解剖
  • 训推一体 | 暴雨X8848 G6服务器 x Intel®Gaudi® 2E AI加速卡
  • Android Audio实战——获取活跃音频类型(十五)
  • 2025 年国内可用 Docker 镜像加速器地址
  • 【深度学习3】向量化(Vectorization)
  • SpringUI Axure元件库:重塑高效原型设计的专业工具集
  • Agent在供应链管理中的应用:库存优化与需求预测
  • 从ELF到进程间通信:剖析Linux程序的加载与交互机制
  • QT之键盘控制虚拟遥控系统开发总结
  • Qt串口通信中继电器状态解析的优化实践