ajax教程

文章目录

  • 一、原生ajax
    • 1、AJAX 简介
    • 2、特点
      • 1)优点
      • 2)缺点
  • 二、http协议
    • 1、概念
    • 2、Cookie和Session机制
      • 1)Cookie
      • 2)Session
      • 3)报文
  • 二、请求头
    • 1、概念
    • 2、常见请求头:
    • 3、Content-Type
  • 三、AJAX使用
    • 1、详细操作
    • 2、IE缓存问题
    • 3、请求超时与网络异常
    • 4、取消请求/重复请求问题
  • 四、axios发送ajax请求
    • 1、get/post
    • 2、通用方式
  • 五、fetch函数发送ajax
  • 六、跨域
    • 1、同源策略
    • 2、解决跨域——JSONP
    • 3、CORS

一、原生ajax

1、AJAX 简介

  • AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。
  • 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。
  • AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。
  • 最早服务端通过ajax传输的是xml数据,现在都用JSON格式。

2、特点

1)优点

  • 可以无需刷新页面而与服务器端进行通信。
  • 允许你根据用户事件来更新部分页面内容。

2)缺点

  • 没有浏览历史,不能回退
  • 存在跨域问题(同源)
  • SEO 不友好(搜索引擎优化)(爬虫爬不到)

二、http协议

1、概念

  • HTTP(hypertext transport protocol)协议「超文本传输协议」协议详细规定了浏览器和万维网服务器之间互相通信的规则。
  • 它是Web中最常用的协议之一,用于在Web浏览器和Web服务器之间传输数据。HTTP基于客户端-服务器模型,客户端发送HTTP请求,服务器响应HTTP响应。
  • HTTP协议采用无状态的方式,即每个请求都是独立的,服务器不会记住之前的请求。为了解决这个问题,引入了Cookie和Session等机制来维持状态。
  • HTTP协议采用明文传输,安全性较低,为了加强安全性,可以使用HTTPS(HTTP Secure)协议,通过SSL/TLS加密来保护数据传输的安全性。
  • HTTP协议定义了很多不同的请求方法(GET、POST、PUT、DELETE等)以及状态码(200、404、500等),用于描述请求的目的和服务器处理请求的结果。

2、Cookie和Session机制

都是用来在Web应用程序中维持用户状态的方式,使得服务器可以识别和区分不同的用户。

1)Cookie

  • Cookie是服务器发送给客户端的小型文本文件,存储在用户的计算机上。
  • Cookie通常包含了一些标识用户的信息,例如用户ID、会话ID等。
  • 当用户访问网站时,浏览器会将相应的Cookie信息发送给服务器,以便服务器识别用户。
  • Cookie可以设置过期时间,可以是会话性的(浏览器关闭后失效)或是持久性的(在指定时间后失效)。

2)Session

  • Session是在服务器端保存用户状态的机制,通常使用Session ID来识别不同的用户会话。
  • 当用户第一次访问网站时,服务器会为其创建一个唯一的Session ID,并将其存储在服务器上。
  • 每次用户请求时,服务器会通过Session ID来识别用户,并为用户保存状态信息。
  • Session通常会在一段时间内保持活跃,一般情况下会在用户关闭浏览器或一定时间后失效。

Cookie和Session机制在Web开发中经常被同时使用,Cookie通常用于存储少量的用户信息或标识,而Session则用于存储更多的用户状态信息。它们都是为了实现用户认证、保持用户登录状态、跟踪用户行为等功能而设计的。

3)报文

  1. 请求报文
    在HTTP协议中,请求报文是客户端(例如Web浏览器)发送给服务器的数据格式,用于请求特定资源的内容。请求报文通常包含了请求行、请求头和请求体三个部分。
    在这里插入图片描述
    通过请求报文,客户端可以向服务器发起不同类型的HTTP请求,如获取资源(GET请求)、提交表单数据(POST请求)、更新资源(PUT请求)等。服务器收到请求报文后,根据其中的信息执行相应的操作,并返回对应的响应报文给客户端。
  2. 响应报文
    响应报文是服务器发送给客户端(例如Web浏览器)的数据格式,用于响应客户端发起的请求并返回请求的结果。响应报文通常包含了状态行、响应头和响应体三个部分。
    在这里插入图片描述
    通过响应报文,服务器将处理结果返回给客户端,客户端根据响应报文中的信息进行处理,如显示网页内容、处理数据、下载文件等。响应报文中的状态码是客户端了解服务器处理结果的重要指标,常见的状态码包括200(请求成功)、404(未找到资源)、500(服务器内部错误)等。

二、请求头

1、概念

  • 在HTTP(Hypertext Transfer Protocol,超文本传输协议)中,请求头(Request Header)是客户端(例如Web浏览器)发送给服务器的一部分数据,用于描述请求的信息和附加信息。请求头通常包含了关于请求的各种元数据和参数,帮助服务器理解和处理客户端发送的请求。
  • 服务器在接收到请求头后,可以根据请求头中的信息进行相应的处理和响应。请求头是HTTP通信中重要的组成部分,它帮助客户端和服务器之间传递各种信息,实现数据交互和资源请求。

2、常见请求头:

  1. Accept:指定客户端能够接受的内容类型
  2. Accept-Encoding:指定客户端能够接受的内容编码方式
  3. Accept-Language:指定客户端能够接受的自然语言
  4. Cache-Control:控制缓存的行为
  5. Connection:指定连接是否保持持久连接
  6. Content-Length:请求体的长度
  7. Content-Type:请求体的数据类型
  8. Cookie:包含客户端的Cookie信息
  9. Host:指定请求的目标主机
  10. User-Agent:客户端的用户代理字符串
  11. Referer:指定请求的来源页面URL
  12. Authorization:包含客户端认证信息
    请求头中的Content-Type字段用于指示请求或响应中实体主体的媒体类型(Media Type),也就是实体主体的数据格式。Content-Type字段告诉服务器或客户端如何解析请求或响应的主体内容。

3、Content-Type

常见的Content-Type值包括:

  • text/plain:纯文本格式
  • text/html:HTML格式
  • application/json:JSON格式
  • application/xml:XML格式
  • application/x-www-form-urlencoded:表单数据格式
  • multipart/form-data:多部分表单数据格式

通过Content-Type字段,服务器可以正确解析请求的数据格式,客户端也可以正确解析服务器返回的数据格式,确保数据能够被正确处理和显示。

在发送POST请求时,通常需要设置Content-Type字段来指定请求主体的数据格式,以便服务器正确解析数据。在处理响应时,客户端也会根据响应头中的Content-Type字段来正确解析服务器返回的数据格式。

三、AJAX使用

1、详细操作

//获取button元素
const btn = document.getElementByTagName('button')[0]
//绑定事件
btn.onclick = function(){1.创建对象const xhr = new XMLHttpRequest()1)设置响应体类型xhr.responseType = 'json'2.初始化,设置请求的方法和urlxhr.open('GET','http://127.0.0.1:8000/server')1)若是get请求,通过如下传递参数'http://127.0.0.1:8000/server?a=100&b=200&c=300'2)设置请求头xhr.setRequestHeader(头名,头值)eg.xhr.setRequestHeader('Content-type''application/x-www-form-urlencoded') //详细介绍见下面3.发送xhr.send()若是post请求,通过如下传递参数xhr.send(a=100&b=200&c=300)  //这里请求体格式很灵活。看后端怎么处理4.事件绑定,处理服务端返回的结果on : when 当...时候readystate:是xhr对象中的属性,表示状态0 1 2 3 40:未初始化,最开始状态1:open调用完毕2:send调用完毕3:服务端返回部分结果4:服务端返回所有结果change:改变的时候触发,因此会触发四次xhr.onreadystatechange = function(){//判断if(xhr.readystate == 4){  //返回所有结果//判断响应状态码,状态码2开头都表示成功,2xxif(xhr.status>=200 && xhr.status<300){//处理结果  行 头 空行 体1.响应行:xhr.status保存响应行xhr.statusText保存响应的状态字符串 OK等xhr.getAllResponseHeaders()保存所有响应头xhr.response保存响应体(内容)2.处理返回的JSON文件//手动转换let data = JSON.parse(xhr.response)//自动转换,在xhr.open前面设置响应体类型}}}
}

2、IE缓存问题

IE浏览器会对AJAX的请求结果进行缓存,若频繁发送,浏览器会认为你与之前发送的请求是一致的,则下一次从本地缓存中拿数据,返回结果就不是新数据,如果那一段事件发送请求的数据改变了,则缓存的数据就不是请求的数据,会出现问题

btn.onclick = function(){const xhr = new XMLHttpRequest()//解决IE缓存问题,每次发送的请求随事件改变,则浏览器认为前后的请求是不一样的,就不会从缓存拿数据xhr.open('GET','http://127.0.0.1:8000?t='+Date.now)  xhr.send()xhr.onreadystatechange = function(){if(xhr.readystate == 4){ if(xhr.status>=200 && xhr.status<300){}}}
}

3、请求超时与网络异常

btn.onclick = function(){const xhr = new XMLHttpRequest()//超时设置2sxhr.timeout = 2000s //超时回调,出问题之后取消请求xhr.onetimeout = function(){alert('网络异常,请稍后重试')}//网络异常,出问题之后取消请求xhr.onerror= function(){alert('你的网络似乎出了问题')}xhr.open('GET','http://127.0.0.1:8000?t='+Date.now)  xhr.send()
}

4、取消请求/重复请求问题

  • 取消:可以手动取消请求。xhr.absort() //取消请求
    重复请求问题:如果用户在短时间内一直点击发送请求,那么响应压力就会很大,因此需要防抖动(点击后取消前一个请求)
let flag = false  //是否正在发送请求
const xhr = null
btn.onclick = function(){if(flag) xhr.absort //如果正在发送,则取消该请求,创建一个新的请求xhr = new XMLHttpRequest()flag=truexhr.open('GET','http://127.0.0.1:8000?t='+Date.now)  xhr.send()xhr.onreadystatechange = function(){if(xhr.readystate == 4){ //修改标识变量flag = false }}}

四、axios发送ajax请求

  • Axios是一个基于Promise的HTTP客户端,可以用在浏览器和Node.js环境中。它可以让我们更容易地发送异步请求到服务器并处理响应数据。
  • Promise是一种用于处理异步操作的对象,它表示一个异步操作的最终完成(或失败),以及其结果值。
    详细介绍见官网

1、get/post

axios.default.baseURL = 'http://127.0.0.1:8000'
btn.onclick = function(){axios.get('/server',{        //利用baseURL对路径进行简化//url参数params:{id:12345},//请求头信息headers:{'Content-type':'application/x-www-form-urlencoded'},}).then(value=>{//value存储各种信息})axios.post('/server',{       //第二个参数作为请求体username:'admin'},{        //利用baseURL对路径进行简化//url参数params:{id:12345},//请求头信息headers:{'Content-type':'application/x-www-form-urlencoded'}}).then(value=>{})
}

2、通用方式

btn.onclick = function(){axios({//请求方法method:"POST",//urlurl:'/server',/url参数params:{id:12345},//请求头信息headers:{'Content-type':'application/x-www-form-urlencoded'},//请求体data:{username:"1"}}).then(response=>{//response存储返回信息		})
}

五、fetch函数发送ajax

fetch()函数是全局对象,直接调用,返回promise对象

btn.onclick = function(){fetch('/server?age=18',{//请求方法method:"POST",//请求头信息headers:{'Content-type':'application/x-www-form-urlencoded'},//请求体body:{username:"1"}}).then(response=>{return response.text()}).then((response)=>{  //需要两层then})
}

六、跨域

1、同源策略

  • 同源策略是一种浏览器的安全策略,用于限制一个网页文档或脚本如何与另一个来源的资源进行交互。在同源策略下,不同源的网页(指协议、域名、端口号有任何一个不同)之间的脚本和数据通信受到限制,这有助于防止恶意网站利用用户的身份信息和敏感数据。
  • 一句话来说,就是网页的url和ajax请求服务端的url必须协议,域名,端口号完全相同
  • 同源策略是浏览器的一项重要安全功能,它有助于保护用户的隐私和安全。
  • 违背同源策略就是跨域
btn.onclick = function(){const xhr = new XMLHttpRequest()xhr.open('GET','./server')   //满足同源策略,url可以简写  xhr.send()
}

2、解决跨域——JSONP

  • 介绍:JSONP(SON with Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持 get请求。
  • 开发中不常用,一是只能支持get,二是对前后端配合协作要求高。
  • 工作原理:
    在网页有一些标签天生具有跨域能力,比如:img link iframe script。
    JSONP 就是利用 script 标签的跨域能力来发送请求的。(即script的src属性引用数据时不受跨域条件限制)

3、CORS

  • CORS(Cross-0rigin Resource sharing),跨域资源共享。CORS 是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持get和 post 请求。
  • 跨域资源共享标准新增了一组 HTTP 响应头,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。
  • 工作原理:CORS是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行。
  • 使用:主要是服务器端的设置
  • 有很多不同的请求头,每个都有不同的限制,具体看文档
//设置响应头,设置允许跨域
//*表示所有的网页都允许,也可以设置其他url
response.setHeader('Access-Control-Allow-Origin',"*")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297509.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RealSense】Ubuntu20.04 安装 Intel® RealSense™ ROS 并使用 D435i 测试

【RealSense】Ubuntu20.04 安装 Intel RealSense™ ROS 并使用 D435i 测试 1 本机环境2 安装流程3 存在的 bug3.1 Resource not found: rgbd_launch 1 本机环境 Ubuntu20.04ROS Noetic 2 安装流程 参考文档: Link 安装 Intel RealSense™ SDK 2.0&#xff0c;参考上一篇文章:…

【办公类-47-01】20240404 Word内部照片批量缩小长宽(课题资料系列)

作品展示 背景需求 最近在做《运用Python优化3-6岁幼儿学习操作材料的实践研究》的课题研究资料&#xff08;上半学期和下半学期&#xff09;。 将CSDN里面相关的研究照片文字贴入Word后&#xff0c;就发现一张图片就占了A4竖版一页&#xff0c;太大了。我想把word里面的所有…

入门用Hive构建数据仓库

在当今数据爆炸的时代&#xff0c;构建高效的数据仓库是企业实现数据驱动决策的关键。Apache Hive 是一个基于 Hadoop 的数据仓库工具&#xff0c;可以轻松地进行数据存储、查询和分析。本文将介绍什么是 Hive、为什么选择 Hive 构建数据仓库、如何搭建 Hive 环境以及如何在 Hi…

unity学习(82)——profiler 限制帧率

实际测试发现当玩家个数增加时&#xff0c;客户端明显变的很卡&#xff0c;想知道为什么变卡了&#xff01; 1.只有玩家自己的时候 2.两个时候感觉脚本的工作量增大了 拖了一会直接炸了&#xff01;&#xff08;数据包积压把内存搞炸&#xff0c;我第一次见&#xff09; 3.我觉…

哈佛大学商业评论 --- 第三篇:真实世界中的增强现实

AR将全面融入公司发展战略&#xff01; AR将成为人类和机器之间的新接口&#xff01; AR将成为人类的关键技术之一&#xff01; 请将此文转发给您的老板&#xff01; --- 本文作者&#xff1a;Michael E.Porter和James E.Heppelmann 虽然物理世界是三维的&#xff0c;但大…

数据结构课堂考勤管理系统

摘要 高校的不断扩张让在校学生数量不断的增加&#xff0c;对于教师和管理人员的需求也在不断地增强&#xff0c;对日常的学生考勤管理的工作量也在日益增加&#xff0c;传统的人工点名签到的考勤管理模式已经给无法适用于当前高校考勤管理的需求&#xff0c;同时手动录入的考…

Transformer学习: Transformer小模块学习--位置编码,多头自注意力,掩码矩阵

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Transformer学习 1 位置编码模块1.1 PE代码1.2 测试PE1.3 原文代码 2 多头自注意力模块2.1 多头自注意力代码2.2 测试多头注意力 3 未来序列掩码矩阵3.1 代码3.2 测试掩码 1 …

电工技术学习笔记——直流电路及其分析方法

一、直流电路 电路的组成 1. 电压和电流的参考方向 电压&#xff08;Voltage&#xff09;&#xff1a;电压是电场力对电荷产生的作用&#xff0c;表示为电荷单位正电荷所具有的能量。在电路中&#xff0c;电压通常被定义为两点之间的电势差&#xff0c;具有方向性&#xff0c;…

【前端面试3+1】11 http和https有何不同及https的加密过程、数组有哪些方法及作用、tcp三次握手四次挥手、【分发饼干】

一、http和https有何不同&#xff1f;https的加密过程 1、不同&#xff1a; HTTP和HTTPS的主要区别在于安全性。HTTP是超文本传输协议&#xff0c;是一种用于传输数据的协议&#xff0c;但是传输的数据是明文的&#xff0c;容易被窃听和篡改。而HTTPS是在HTTP基础上加入了SSL/T…

五、企业级架构之Nginx负载均衡

一、负载均衡技术 1、介绍&#xff1a; 负载均衡技术&#xff08;Load Balance&#xff09;是一种概念&#xff0c;其原理就是把分发流量、请求到不同的服务器&#xff0c;平均分配用户请求。 2、作用&#xff1a; ① 流量分发&#xff0c;请求平均&#xff0c;提高系统处理…

idea改vm参数后没法重启

背景 Idea2023修改了编译器compiler内存&#xff0c;maven的run time内存&#xff0c;idea安装目录下idea64.exe.vmoptions选项的jvm内存参数后导致idea启动时没有任何反应&#xff0c;也没有任何日志输出 idea2023没法重启 导致idea2023没法重启的操作步骤如下 1.修改idea的…

腾讯云服务器4核8g配置好不好?用它干啥使?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

国外媒体推广软文宣发:促进海外宣发新风尚,迈向国际舞台

大舍传媒http://www.dashemeijie.com 序言 伴随全球经济一体化发展趋向&#xff0c;越来越多的中国企业希望在国际舞台上表现自己的总体水平。而国外媒体软文发稿作为一种全新的海外宣传方式&#xff0c;正逐渐成为促进海外宣发新风尚的主要常用工具。接下来我们就探讨国外媒…

深入浅出 -- 系统架构之垂直架构

当业务复杂度增加、访问量逐渐增大出现高并发时&#xff0c;单体架构无法满足需求&#xff0c;可以根据业务功能对系统进行拆分&#xff0c;以提高访问效率。 垂直架构介绍 1.垂直架构一般是因为单体架构太过于庞大而进行的拆分&#xff0c;拆分后各个系统应满足独立运行互相不…

关于hive启动的相关问题记录

问题&#xff1a;初始化hive元数据报错 [atguiguhadoop102 software]$ schematool -initSchema -dbType mysql -verboseError: Table CTLGS already exists (state42S01,code1050) Closing: 0: jdbc:mysql://hadoop102:3306/metastore?useSSLfalse org.apache.hadoop.hive.me…

中文Mistral模型介绍(Chinese-Mistral)——中文大语言模型

中文Mistral简介 Chinese-Mistral由清华大学地学系地球空间信息科学实验室开发。 该模型基于Mistral发布的Mistral-7B-v0.1训练得到。首先进行中文词表扩充&#xff0c;然后采用实验室提出的PREPARED训练框架&#xff08;under review&#xff09;在中英双语语料上进行增量预训…

C++核心高级编程 --- 4.类和对象

文章目录 第四章&#xff1a;4.类和对象4.1 封装4.1.1 封装的意义4.1.2 struct与class的区别 4.2 对象的初始化和清理4.2.1 构造函数和析构函数4.2.2 构造函数的分类及调用4.2.3 拷贝构造函数调用时机4.2.4 构造函数调用规则4.2.5 深拷贝与浅拷贝4.2.6 初始化列表4.2.7 类对象作…

树莓派部署yolov5实现目标检测(ubuntu22.04.3)

最近两天搞了一下树莓派部署yolov5&#xff0c;有点难搞&#xff08;这个东西有点老&#xff0c;版本冲突有些包废弃了等等&#xff09; 最后换到ubuntu系统弄了&#xff0c;下面是我的整体步骤&#xff08;建议先使能一下ssh&#xff08;最下面有&#xff09;&#xff0c;结合…

Redis中的复制功能(五)

心跳检测 概述 在命令传播阶段&#xff0c;从服务器默认会以每秒一次的频率&#xff0c;向主服务器发送命令: REPLCONF ACK < replication_offset >其中replication_offset是从服务器当前的复制偏移量。 发送REPLCONF ACK命令对于主从服务器有三个作用: 1.检测主从服…

一、企业级架构之LNMP

一、LNMP 概述 1、LNMP之间的关系&#xff1a; LNMP Linux Nginx MySQL PHP 2、配置LNMP服务器&#xff1a; (1) 克隆一台centos7虚拟机&#xff0c;修改 IP 地址 和 UUID 编号。 IP 为 10.1.1.10&#xff0c;UUID 修改后三位。 (2) 设置主机名称&#xff0c;绑定IP地…