备案 控制台
开发者社区 开发与运维 文章 正文

小白来实现一个Ajax请求[Ajax使用方法及相关知识点详细解析——超级全]

简介: 写在前面:本文主要总结整理Ajax使用方法背景知识点的详细解析,以及Ajax跨域的具体使用方式并且对栗子进行了讲解,需要的朋友可以过来参考下,喜欢的可以点波赞,或者关注一下本人,希望通过本文能够作为一个Ajax的查找资料,不懂Ajax?看这篇文章就可以了。ajax简介:Ajax 的全称是Asynchronous JavaScript and XML,意思是:异步 JavaScript 和 XMLAjax是使用XMLHttpRequest对象与服务器端通信的脚本语言可以发送及接收各种格式的信息,包括JSON、XML、HTML和文本文件。AJAX可以无需刷新页面而与服务器端进行通信。

写在前面:

本文主要总结整理Ajax使用方法背景知识点的详细解析,以及Ajax跨域的具体使用方式并且对栗子进行了讲解,需要的朋友可以过来参考下,喜欢的可以点波赞,或者关注一下本人,希望通过本文能够作为一个Ajax的查找资料,不懂Ajax?看这篇文章就可以了。


ajax简介:

  • Ajax 的全称是Asynchronous JavaScript and XML,意思是:异步 JavaScript 和 XML
  • Ajax是使用XMLHttpRequest对象与服务器端通信的脚本语言
  • 可以发送及接收各种格式的信息,包括JSON、XML、HTML和文本文件。
  • AJAX可以无需刷新页面而与服务器端进行通信。
  • 允许你根据用户事件来更新部分页面内容。

Ajax工作原理:

Ajax的工作原理相当于在用户和服务器之间加了一个中间层(Ajax引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证(比如判断用户是否输入了数据)和数据处理(比如判断用户输入数据是否是数字)等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。把这些交给了Ajax引擎,用户操作起来也就感觉更加流畅了。

Ajax的优点:

  1. 页面无刷新,用户体验好。
  • AJAX最大优点就是能在不刷新整个页面的前提下与服务器通信维护数据。这使得Web应用程序更为迅捷地响应用户交互,并避免了在网络上发送那些没有改变的信息,减少用户等待时间,带来非常好的用户体验。
  1. 异步通信,更加快的响应能力。
  • AJAX使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。优化了Browser和Server之间的沟通,减少不必要的数据传输、时间及降低网络上数据流量。
  1. 减少冗余请求,减轻了服务器负担
  • AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担,提升站点性能。
  1. 基于标准化的并被广泛支持的技术,不需要下载插件或者小程序
  • AJAX基于标准化的并被广泛支持的技术,不需要下载浏览器插件或者小程序,但需要客户允许JavaScript在浏览器上执行。
  1. 界面与应用分离。
  • Ajax使WEB中的界面与应用分离(也可以说是数据与呈现分离),有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率、也更加适用于现在的发布系统。

Ajax应用场景:

  • 数据验证。用户的注册,登录功能,通过与后台交互数据,进行数据验证
  • 按需取数据。按照需求,展示所需要的部分数据,而不是一股脑的将整个网页全都展示出来。
  • 自动更新页面。栗子:百度搜索的提示,出现联想提示语,展示用户最有可能搜索的词汇。
  • 自动更新页面。栗子:在线聊天室,设置一个定时器,每隔几秒向请求数据,实时更新页面信息。

同步执行和异步执行。

javascript同步表示sync,指的就是:代码依次执行。javascript 异步表示async,指:代码执行不按顺序,可以这么理解:同步是在一条直线上的队列,异步不在一个队列上 各走各的。javascript所谓的“线程”,就是这样的一种概念。

虽然异步执行可以实现多任务并行执行,使执行的效率大大提高,但是异步执行也会占用浏览器的性能,不要胡乱的使用异步执行。

举个栗子:在负荷很重的客户/服务器系 统中,时间延迟频繁且漫长,在这种环境下就比较适宜宜采用异步执行模式。

关于同步和异步,大概只能说这些,有兴趣的朋友可以自己深入了解一下。


开始一个Ajax请求需要了解的背景知识:

XMLHttpRequest对象:

Ajax的核心是XMLHttpRequest对象,它是Ajax实现的关键,发送异步请求、接受响应以及执行回调都是通过它来完成,下面我们就来聊一聊XMLHttpRequest对象是什么鬼?拥有哪些属性、方法,这些都是用来干什么的,这对于我们系统性的了解Ajax请求是非常有帮助的。

XMLHttpRequest对象的属性:

image.png

XMLHttpRequest对象的方法:

image.png

XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均支持 XMLHttpRequest 对象。,XMLHttpRequest对象的使用方式极其简单,先不要懵逼。继续往下看。

Ajax的跨域请求由哪些部分组成的

  • HTTP请求的方法或动作,Ajax请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
  • 需要请求的URL,总得告诉服务器请求的地址是什么吧?
  • 请求头,包含一些客户端环境信息,身份验证信息等
  • 请求体,也就是请求正文,请求正文中可以包含客户端提交的查询字符串信息,表单信息等等.

GET和POST两种请求方式对比:

image.png

在前后端分离的情况下,对于前端的小伙伴来说,一般是后端选择请求接口,请求方式,让我们去使用,所以请求方式的选择这点,稍微了解一下即可。

Ajax的跨域请的回复:http响应:

  • 一个数字和文字组成的状态码,用来显示请求是成功还是失败
  • 响应头,响应头和请求头一样包含许多有用的信息,例如服务器类型,日期时间,内容类型和长度等.
  • 响应体,也就是响应正文.

服务器端返回的:常见的HTTP状态码

image.png

关于http的状态码还有非常多,不止上图这点这么简单,有兴趣的可以看本人之前写的一篇文章: http状态码详解。


如何使用Ajax

本文中的栗子采用菜鸟教程ajax的栗子: ajax实例

实现Ajax的四个步骤:

  1. 新建一个XMLHttpRequest对象。
  2. open方法表示初始化请求,此时并没有发送。
  3. 定义数据返回后的回调函数,里面的代码在readystatechange值改变的时候执行。
  4. 发送请求。

使用Ajax的一个栗子,里面注释的也较为详细:

function loadXMLDoc()
{//点击事件
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
  }
  else
  {
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 //1、上面是创建XMLHttpRequest对象
  xmlhttp.open("POST","/try/Ajax/demo_post2.php",true);// 2、open方法表示初始化请求,此时并没有发送。
  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  xmlhttp.send("fname=Henry&lname=Ford");//4、发送请求
  xmlhttp.onreadystatechange=function();
  {//3、当参数被传入服务器的时候,引用监听事件。
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    //判断readyState四种状态,当执行四步完成之后,并且返回的是200(成功)
    {
      document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
}

1、新建一个XMLHttpRequest对象:

XMLHttpRequest对象在上文介绍了他的属性和方法,如上所述, Ajax的核心是XMLHttpRequest对象,这一步是必不可少的,下面就是它的使用语法。

var xmlhttp = new XMLHttpRequest();//没看错,就是这么简单

Ajax兼容IE7以下:

XMLHttpRequest对象是IE7才开始支持的,老版本IE5和IE6使用的是ActiveX 对象,使用方式是一样的,区别在于要创建不同的对象。IE7以上自带XMLHttpRequest对象,如果要兼容IE5和IE6只需判断浏览器中是否存在XMLHttpRequest对象。

var xmlhttp;
  if (window.XMLHttpRequest)//检查是否有XMLHttpRequest对象
  {
    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
  }
  else
  {
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

2、open方法表示初始化请求,此时并没有发送。

open方法的语法open(method,url,async)

  1. 参数一:method——请求方式,get或者post。(默认为get)
  2. 参数二:url——请求路径,文件在服务器上的位置
  3. 参数三:async——true:异步请求。false:同步请求。(默认为true,异步请求。)

3.定义数据返回后的回调函数,里面的代码在readystatechange值改变的时候执行。

触发Ajax的时候,XMLHttpRequest 的状态会不断变化,这个值就存在readyState属性中。

readyState属性:

readyState只有5个值{0,1,2,3,4},只读不能写。

0: XMLHttpRequest对象创建完成。————还没有调用open()方法

1: XMLHttpRequest对象初始化完成。————open() 方法已调用,但是 send()方法未调用。请求还没有被发送。

2: 请求已经发送。———Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。

3: 服务器已经返回了数据(但是还没有被解析,可能只一段http报文)。————正在解析响应内容

4: 数据解析已经完成。————响应内容解析完成,可以在客户端调用了

数据解析完成之后会返回一个http的状态码,通过XMLHttpRequest.status获得该值,判断是否为200,判断是否请求成功

onreadystatechange事件:

每当readyState属性值改变时,就会触发 onreadystatechange 事件。——通过监听onreadystatechange事件,来判断请求的状态。

4、发送请求

  1. send()方法必须在open()之后。
  • 在使用GET方式请求时无需填写参数
  • 在使用POST方式时需要使用setRequestHeader()来添加http头,然后在 send() 方法中规定您希望发送的数据

get:

xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
  xmlhttp.send();

post:

xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  xmlhttp.send("fname=Henry&lname=Ford");

菜鸟教程的栗子: get方式、 post方式


OBKoro1
目录
相关文章
长梦
|
26天前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
长梦
64 2
长梦
|
26天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
长梦
39 2
长梦
|
26天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
长梦
33 1
桃李春风一杯酒
|
8天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的 HTTP 请求过程,包括 DNS 解析、TCP 握手、HTTP 请求和响应等环节
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
桃李春风一杯酒
18 0
景天科技苑
|
9天前
|
前端开发 JavaScript
ES6:Promise使用方法解析大全
ES6:Promise使用方法解析大全
景天科技苑
5 0
1941623231718325
|
10天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
1941623231718325
22 2
东北赵四
|
16天前
|
Web App开发 前端开发 Java
SpringBoot之请求的详细解析
SpringBoot之请求的详细解析
东北赵四
22 0
东北赵四
|
16天前
|
存储 缓存 Java
SpringBootWeb请求响应之前言及状态码的详细解析
SpringBootWeb请求响应之前言及状态码的详细解析
东北赵四
11 0
长梦
|
26天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
长梦
84 0
aliyun5297948689-49597
|
27天前
|
分布式计算 资源调度 监控
Hadoop生态系统深度剖析:面试经验与必备知识点解析
本文深入探讨了Hadoop生态系统的面试重点,涵盖Hadoop架构、HDFS、YARN和MapReduce。了解Hadoop的主从架构、HDFS的读写流程及高级特性,YARN的资源管理与调度,以及MapReduce编程模型。通过代码示例,如HDFS文件操作和WordCount程序,帮助读者巩固理解。此外,文章强调在面试中应结合个人经验、行业动态和技术进展展示技术实力。
aliyun5297948689-49597
18 0

热门文章

最新文章

  • 1
    Ganos H3地理网格能力解析与最佳实践
  • 2
    创建AJAX五大基本步骤
  • 3
    Vue3 Ajax(axios)
  • 4
    AJAX载入外部JS文件到页面并让其执行的方法(附源码)
  • 5
    深入解析Redis:一种快速、高效的键值存储系统
  • 6
    深度解析JVM世界:JVM内存分配
  • 7
    Redis 实现延迟任务的深度解析
  • 8
    深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
  • 9
    使用 Webmin+bind9快速搭建私有DNS服务器
  • 10
    每天解析一个shell脚本(58)
  • 1
    Git 术语解析:深入理解上游分支
    96
  • 2
    敏捷开发:解析灵活而高效的软件开发方法
    53
  • 3
    TiDB适用场景解析:海量数据存储与高并发读写的利器
    301
  • 4
    深入学习 XML 解析器及 DOM 操作技术
    72
  • 5
    Python基础算法解析:支持向量机(SVM)
    74
  • 6
    探索Java并发编程:Fork/Join框架的深度解析
    25
  • 7
    视觉智能平台常见问题之图片解析出的水印图判断是自己添加的水印图如何解决
    24
  • 8
    Java必刷入门递归题×5(内附详细递归解析图)
    23
  • 9
    【进阶C语言】数组笔试题解析
    19
  • 10
    哲学家解析Sora本质,AI视频离世界模拟器还有多远?
    32
  • 相关课程

    更多
  • 第八届大学生创新创业大赛阿里命题IoT赛题解析
  • 云计算工程师解析与实战-网络专家篇(体验版)
  • 深入解析Docker容器化技术
  • Java面试疑难点解析 - 面试技巧及语言基础
  • Java面试疑难点解析 - Java Web开发
  • Java面试疑难点解析 - 系统架构及项目设计
  • 相关电子书

    更多
  • 神龙云服务器产品及技术深度解析
  • 弹性创造价值:基于ECS的最佳性价比实践解析
  • 又快又稳:阿里云下一代虚拟交换机解析
  • 相关实验场景

    更多
  • 通过云拨测对指定服务器进行Ping/DNS监测
  • 推荐镜像

    更多
  • DNS
  • NTP
  • kali-security
  • 下一篇
    部署LAMP环境(Alibaba Cloud Linux 3)

    代做工资流水公司淄博代做车贷工资流水滁州签证流水查询宜春薪资银行流水代做泰州入职流水代开德阳代办签证工资流水常州打印日常消费流水大庆背调流水查询漳州签证工资流水漳州背调银行流水南昌做入职流水上饶查询对公银行流水盐城查询企业对私流水宁波车贷银行流水 代做揭阳自存银行流水模板福州企业银行流水费用海口做自存银行流水常州打印自存流水金华背调工资流水代办阜阳办流水账单咸阳工资流水单南昌流水代开惠州入职工资流水价格嘉兴银行对公流水样本南京工资流水单样本衡阳背调流水制作常德工资流水app截图代办徐州对公流水开具大庆查询工资流水app截图绍兴代办企业流水打印遵义房贷工资流水 制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

    代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化