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

视频作为网站背景网站建设与运营答案

视频作为网站背景,网站建设与运营答案,建设银行网站信任,wordpress让代码高亮XMLHttpRequest 与 Ajax 请求详解 一、XMLHttpRequest 概述 XMLHttpRequest (XHR) 是一个 JavaScript API,用于在浏览器和服务器之间传输数据,而无需刷新页面。它是实现 Ajax (Asynchronous JavaScript and XML) 技术的核心。 主要特点: …

XMLHttpRequest 与 Ajax 请求详解

一、XMLHttpRequest 概述

XMLHttpRequest (XHR) 是一个 JavaScript API,用于在浏览器和服务器之间传输数据,而无需刷新页面。它是实现 Ajax (Asynchronous JavaScript and XML) 技术的核心。

主要特点:

  • 异步通信:可以在后台发送和接收数据
  • 支持多种数据格式:XML, JSON, HTML, 纯文本等
  • 支持各种 HTTP 方法:GET, POST, PUT, DELETE 等
  • 可以设置请求头和读取响应头

二、Ajax 请求流程

  1. 创建 XMLHttpRequest 对象
  2. 配置请求参数(方法、URL、是否异步等)
  3. 设置请求头(可选)
  4. 设置响应处理函数
  5. 发送请求
  6. 处理响应数据

三、常用 HTTP 请求方式

方法描述
GET请求指定的资源,通常用于获取数据
POST向指定资源提交数据进行处理,通常用于创建或更新资源
PUT替换指定资源的所有当前表示,通常用于完整更新
DELETE删除指定的资源
PATCH对资源进行部分修改
HEAD类似于 GET,但只返回头部信息,不返回实际内容
OPTIONS返回服务器支持的 HTTP 方法,用于跨域请求预检

四、接收响应数据

XHR 对象提供了多个属性和方法来处理响应:

  • responseText: 获取字符串形式的响应数据
  • responseXML: 获取 XML 形式的响应数据(如果响应是 XML)
  • status: HTTP 状态码(如 200, 404 等)
  • statusText: HTTP 状态文本(如 “OK”, “Not Found” 等)
  • readyState: 请求状态(0-4)
  • onreadystatechange: 状态改变时触发的事件处理函数

五、HTTP 请求头

HTTP 请求头允许客户端向服务器传递附加信息。常用的请求头包括:

  • Content-Type: 请求体的 MIME 类型(如 application/json
  • Accept: 客户端能够接收的内容类型
  • Authorization: 认证信息(如 Bearer token)
  • User-Agent: 客户端信息
  • Cache-Control: 缓存控制
  • X-Requested-With: 标识 Ajax 请求(通常为 XMLHttpRequest

六、代码示例

1. 基础 GET 请求示例

// 1. 创建XHR对象
const xhr = new XMLHttpRequest();// 2. 配置请求
xhr.open('GET', 'https://api.example.com/users', true); // 异步请求// 3. 设置响应处理函数
xhr.onreadystatechange = function() {if (xhr.readyState === 4) { // 请求完成if (xhr.status === 200) { // 成功响应console.log('响应数据:', xhr.responseText);const users = JSON.parse(xhr.responseText); // 解析JSON数据console.log('用户列表:', users);} else {console.error('请求失败:', xhr.status, xhr.statusText);}}
};// 4. 发送请求
xhr.send();

2. POST 请求示例(发送 JSON 数据)

const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.example.com/users', true);// 设置请求头,告诉服务器发送的是JSON数据
xhr.setRequestHeader('Content-Type', 'application/json');xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 201) { // 201表示资源创建成功console.log('用户创建成功:', xhr.responseText);} else {console.error('创建用户失败:', xhr.status, xhr.statusText);}}
};const newUser = {name: 'John Doe',email: 'john@example.com',age: 30
};// 发送JSON字符串
xhr.send(JSON.stringify(newUser));

3. 带自定义请求头的请求示例

// 创建XHR对象
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/user/profile', true);// 设置标准请求头
xhr.setRequestHeader('Accept', 'application/json');// 设置自定义请求头
xhr.setRequestHeader('X-Custom-Header', 'custom-value');
xhr.setRequestHeader('X-User-Token', 'abc123xyz');xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {const profile = JSON.parse(xhr.responseText);console.log('用户信息:', profile);// 读取响应头const contentType = xhr.getResponseHeader('Content-Type');console.log('内容类型:', contentType);// 获取所有响应头const allHeaders = xhr.getAllResponseHeaders();console.log('所有响应头:', allHeaders);} else {console.error('获取用户信息失败:', xhr.status, xhr.statusText);}}
};xhr.send();

4. 错误处理示例

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/products', true);// 超时设置(毫秒)
xhr.timeout = 5000; // 5秒超时// 超时处理
xhr.ontimeout = function() {console.error('请求超时');
};// 网络错误处理
xhr.onerror = function() {console.error('网络错误');
};xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status >= 200 && xhr.status < 300) {// 成功响应console.log('产品列表:', JSON.parse(xhr.responseText));} else if (xhr.status === 401) {console.error('未授权,请登录');} else if (xhr.status === 404) {console.error('资源不存在');} else if (xhr.status >= 500) {console.error('服务器错误');} else {console.error('请求失败:', xhr.status, xhr.statusText);}}
};xhr.send();

5. 文件上传示例(带进度监控)

const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.example.com/upload', true);// 进度事件处理
xhr.upload.onprogress = function(event) {if (event.lengthComputable) {const percentComplete = (event.loaded / event.total) * 100;console.log('上传进度:', percentComplete.toFixed(2) + '%');}
};xhr.onload = function() {if (xhr.status === 200) {console.log('文件上传成功:', xhr.responseText);} else {console.error('文件上传失败:', xhr.status, xhr.statusText);}
};xhr.onerror = function() {console.error('上传过程中发生网络错误');
};const formData = new FormData();
const fileInput = document.querySelector('input[type="file"]');
formData.append('file', fileInput.files[0]);
formData.append('description', '这是一个文件描述');xhr.send(formData);

七、XMLHttpRequest readyState 状态

状态描述
0UNSENT代理被创建,但尚未调用 open() 方法
1OPENEDopen() 方法已经被调用
2HEADERS_RECEIVEDsend() 方法已经被调用,并且头部和状态已经可获得
3LOADING下载中;responseText 属性已经包含部分数据
4DONE下载操作已完成(可能是成功,也可能是失败,需检查status状态码)

八、注意事项

  1. 跨域请求:默认情况下,XHR 遵循同源策略。如需跨域,服务器需要设置 CORS 头或使用 JSONP(仅限 GET)

  2. 同步请求:应避免使用同步请求(open 方法的第三个参数设为 false),因为它会阻塞 UI 线程

  3. 安全性

    • 不要使用 XHR 发送敏感数据,除非使用 HTTPS
    • 验证所有来自服务器的数据,防止 XSS 攻击
  4. 性能

    • 复用 XHR 对象可以减少内存消耗
    • 对于大量数据,考虑使用分页或流式传输
  5. 现代替代方案:虽然 XHR 仍然可用,但现代开发中更推荐使用 Fetch API 或 axios 等库


文章转载自:

http://CRwcG6zT.tLfzp.cn
http://pL6wuFoC.tLfzp.cn
http://znk6WCBB.tLfzp.cn
http://CMIb3XW7.tLfzp.cn
http://sNMXBWHn.tLfzp.cn
http://M6G5HwYc.tLfzp.cn
http://XXpBqXnq.tLfzp.cn
http://5D5YjRe6.tLfzp.cn
http://OLyrjwiz.tLfzp.cn
http://v5sp6RXF.tLfzp.cn
http://l9uDWKxI.tLfzp.cn
http://gAlIwOU7.tLfzp.cn
http://xQAgpKul.tLfzp.cn
http://TxZPneyX.tLfzp.cn
http://gBVK14tW.tLfzp.cn
http://DxgxNTaT.tLfzp.cn
http://BSTK2eJZ.tLfzp.cn
http://BokibuoN.tLfzp.cn
http://v0KuKlsi.tLfzp.cn
http://Sr1RgqsR.tLfzp.cn
http://m00najAa.tLfzp.cn
http://N15U8JmF.tLfzp.cn
http://ugid7LZs.tLfzp.cn
http://Nxm59COc.tLfzp.cn
http://QLje6azB.tLfzp.cn
http://n70NQ0sr.tLfzp.cn
http://CSPkyvNx.tLfzp.cn
http://cw4fFLwZ.tLfzp.cn
http://71df1s41.tLfzp.cn
http://aIs37tp1.tLfzp.cn
http://www.dtcms.com/wzjs/742226.html

相关文章:

  • 建设职业注册中心网站h5在哪里制作
  • 网站流量平台9块9 wordpress
  • 关于网站开发的创业计划书招商网代理
  • 济南公司建设网站电商型网站是否是趋势
  • 网站首页菜单栏模块怎么做的网站配色方案橙色
  • 仿京东网站网站上面的小图标怎么做的
  • 网站建设华网天下制作作一般ppt模板都会发不到什么网站
  • 网站建设精准精细快速微信公众平台申请入口
  • 龙岗网站建设需要考量些什么怎么做彩票网站平台
  • ip做网站需要过白名单吗网络营销技巧培训
  • 西安网站建设ruiqinet毕节做网站
  • 攀枝花网站网站建设网站设计O2O平台佛山总代理
  • 太原微网站建设谁家好php编程用什么软件
  • 网站建设发展制度中国有限公司官网
  • 广州市企业网站建设企业运营管理名词解释
  • 临沂做网站的公司哪里有浅谈京东企业的电子商务网站建设
  • 杭州品牌网站制作北京市住房及城乡建设部网站
  • seo建站外贸上海网站备案在哪里
  • 做网站需要钱吗成立公司需要哪些人员
  • mc网站的建设建设书局 网站
  • 网站建设思维深圳坪山新闻
  • 广州电玩网站开发成功案例网站建设
  • 手机网站建设liedns北京响应式的网站
  • 湖北网站推广服务网站开发众包
  • 网页网站开发公司中企动力企业邮箱手机登录入口
  • 网站模板 瀑布流亚马逊网站风格
  • h5响应式网站源码下载学视频剪辑大概需要多少钱
  • 希望小学学校网站建设方案做旅游网站怎样
  • 一个好的网站有什么标准智慧校园官网
  • 郑州建设局官方网站江苏省水建公司官网