User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   Web   ›   Ajax   ›   正文
Ajax

Ajax简介和发送异步请求(四步操作)

2020-03-07 18:43:42
1371  0 0
参考目录 隐藏
1) 1.什么是Ajax?
2) 2.同步交互和异步交互
3) Ajax发送异步请求(四步操作)
4) 完整的实例

阅读完需:约 6 分钟

1.什么是Ajax?

Asynchronous Javascript And XML:异步的Javascript和XML。即使用Javascript语言和服务器进行异步交互,Ajax还有一个最大的特点就是,当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新。

Ajax可以使用以下方式进行数据的传输!
text——纯文本
xml——配置文件
json——数据交互的格式,在ajax中最受欢迎

2.同步交互和异步交互

同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就能发出第二个请求;

Ajax发送异步请求(四步操作)

Ajax的核心是XMLHttpRequest对象,所有的异步交互都是使用XMLHttpRequest对象完成的。

第一步:创建异步对象(XMLHttpRequest对象)

//创建request方法	
function createXMLHttpRequest(){
			try {
				return new XMLHttpRequest();//大多数游览器
			} catch (e) {
				try {
					return ActvieXObject("Msxml2.XMLHTTP");//IE6.0
				} catch (e) {
					try {
						return ActvieXObject("Microsoft.XMLHTTP");//IE5.5以及更早
					} catch (e) {
						alert("错误");
						throw e;
					}
				}
			}
			
		}di

第二步:打开与服务器的连接

当得到XMLHttpRequest对象后,就可以调用该对象的open()方法打开与服务器的连接了。
open()方法的参数如下:open(method, url, async):

method:请求方式,通常为GET或POST;
url:请求的服务器地址,例如:,若为GET请求,还可以在URL后追加参数; async:这个参数可以不给,默认值为true,表示异步请求;

xmlHttp.open("GET", "<c:url value='/AjaxServlet'/>", true);

第三步:发送请求

当使用open()方法打开与服务器的连接后,就可以调用XMLHttpRequest对象的send()方法发送请求了。

若是GET请求,需要在URL后连接参数。若没有参数,需要给出null为参数!若不给出null为参数,可能会导致FireFox浏览器不能正常发送请求!

// 3.调用XMLHttpRequest对象的send()方法,发送请求
// GET请求没有请求体,但也要给出null,不然FireFox浏览器不能正常发送请求!
xmlHttp.send(null);

若是POST请求,必须设置Content-Type请求头的值为application/x-www-form-urlencoded。当没有设置Content-Type请求头为application/x-www-form-urlencoded时,Web容器会忽略请求体的内容。所以,在使用Ajax发送POST请求时,需要设置这一请求头,然后使用send()方法来设置请求体内容。

// 2.调用XMLHttpRequest对象的open()方法,打开与服务器的连接
var xmlHttp = createXMLHttpRequest();
xmlHttp.open("POST", "<c:url value='/AjaxServlet'/>", true);
			
// 设置Content-Type请求头
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			
// 3.调用XMLHttpRequest对象的send()方法,发送请求,发送时指定请求体
xmlHttp.send("username=汪汪&password=allan");

第四步:接收服务器的响应

当请求发送出去后,服务器端Servlet就开始执行了,但服务器端的响应还没有接收到。下面我们来接收服务器端的响应。XMLHttpRequest对象有一个onreadystatechange事件,它会在XMLHttpRequest对象的状态发生变化时被调用。下面介绍一下XMLHttpRequest对象的5种状态:

0:初始化未完成状态,只是创建了XMLHttpRequest对象,还未调用open()方法; 1:请求已开始,open()方法已调用,但还没调用send()方法;
2:请求发送完成状态,send()方法已调用;
3:开始读取服务器响应;
4:读取服务器响应结束。

onreadystatechange事件会在状态为1、2、3、4时引发。但通常我们只关心最后一种状态,即读取服务器响应结束时,客户端才会做出改变。我们可以通过XMLHttpRequest对象的readyState属性来得到XMLHttpRequest对象的状态。

其实我们还要关心服务器响应的状态码是否为200,如果服务器响应为404,或500,那么就表示请求失败了。

我们可以通过XMLHttpRequest对象的status属性得到服务器的状态码。 最后,我们还需要获取到服务器响应的内容,可以通过XMLHttpRequest对象的responseText得到服务器响应内容。

//4.XMLHttpRequest对象的onreadystatechange事件,会在XMLHttpRequest对象的状态发生变化时被调用
xmlHttp.onreadystatechange = function() {
				
    // 双重判断
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
 
        // 5.通过XMLHttpRequest对象的responseText得到服务器的响应内容
	var text = xmlHttp.responseText;
					
	// 获取div元素
	var divEle = document.getElementById("div");
	divEle.innerHTML = text;
    }
};

完整的实例

//创建request方法	
function createXMLHttpRequest(){
			try {
				return new XMLHttpRequest();//大多数游览器
			} catch (e) {
				try {
					return ActvieXObject("Msxml2.XMLHTTP");//IE6.0
				} catch (e) {
					try {
						return ActvieXObject("Microsoft.XMLHTTP");//IE5.5以及更早
					} catch (e) {
						alert("错误");
						throw e;
					}
				}
			}
			
		}
/*
 * 可以将method,url,asyn,parans,callback,type变成一个对象option
 * 变成option.method,option.asyn...........
 *
 * 
 * */
//参数1.请求方式2.请求的url,3.是否异步4.请求体5.回调方法6.服务器响应数据转换为什么类型
//method,url,asyn,parans,callback,type
function ajax(option){
	//得到xmlHttp
	var xmlHttp=createXMLHttpRequest();
	//打开链接
	if(!option.method){option.method="GET";}
	if(option.asyn==undefined){option.asyn=true;}
	xmlHttp.open(option.method,option.url,option.asyn);
	//判断是否为post
	if(option.method=="POST"){xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
	//发送
	xmlHttp.send(option.parans);
	//监听
	xmlHttp.onreadystatechange=function(){
		if(xmlHttp.readyState==4 && xmlHttp.status==200){
			
			var data;
			//获取服务器的响应数据,进行转换!
			if(!option.type){
				data=xmlHttp.responseText;
			}else if(option.type=="xml"){
				data=xmlHttp.responseXML;
			}else if(option.type=="text"){
				data=xmlHttp.responseText;
			}else if(option.type="json"){
				var text=xmlHttp.responseText;
				data=eval("("+text+")");
			}
			//调用回调方法
			option.callback(data);
		}
		
	};
	
	
};

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

0 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 594117浏览

随机文章
Ajax——用户注册
5年前
Java—并发编程(七)JUC集合 – (7) ArrayBlockingQueue
3年前
JPA注解
5年前
SpringCloud—Eureka(二)(Ribbon)
5年前
Kotlin-协程(专)—异常处理(三十五)
4年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 594117 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付