微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ajax获取服务器端的响应

一、Ajax 状态值

在创建ajax对象,配置ajax对象,发送请求,以及接收完服务器端响应数据,这个过程中的每一个步骤都会对应一个数值,这个数值就是ajax状态值。

ajax状态值 说明
0 请求未初始化(还没有调用open())
1 请求已经建立,但是还没有发送(还没有调用send())
2 请求已经发送
3 请求正在处理中,通常响应中已经有部分数据可以用了
4 响应已经完成,可以获取并使用服务器的响应了

使用ajax对象下的readyState属性可以到获取ajax的状态值

XMLHttpRequest.readyState // 获取Ajax状态值

这里需要注意和区分一下 Ajax状态值与状态码(Http状态码)的区别

Ajax状态码(值): 表示Ajax请求的过程状态 ajax对象返回的
Http状态码: 表示请求的处理结果 是服务器端返回的

二、onreadystatechange 事件

只要 readyState属性发生变化,就会调用相应的处理函数。这个回调函数会被用户线程所调用XMLHttpRequest.onreadystatechange 会在 XMLHttpRequestreadyState属性发生改变时触发 readystatechange 事件的时候被调用

语法:

XMLHttpRequest.onreadystatechange = callback;

取值:readyState 的值改变的时候,callback函数会被调用

示例:

var xhr = new XMLHttpRequest();
// 0 已经创建了ajax对象 但是还没有对ajax对象进行配置
console.log(xhr.readyState);
xhr.open('get', 'http://localhost:3000/readystate');
// 1 已经对ajax对象进行配置 但是还没有发送请求
console.log(xhr.readyState);

// 当ajax状态码发生变化的时候出发
xhr.onreadystatechange = function() {
	// 2 请求已经发送了
	// 3 已经接收到服务器端的部分数据了
	// 4 服务器端的响应数据已经接收完成
	console.log(xhr.readyState);
	// 对ajax状态码进行判断 如果状态码的值为4就代表数据已经接收完成了
	if (xhr.readyState == 4) {
		console.log(xhr.responseText);
	}
} 

xhr.send();

作为 XMLHttpRequest实例的属性,所有浏览器都支持 onreadystatechange

后来,许多浏览器实现了一些额外的事件(onloadonerroronprogress 等)。详见 使用 XMLHttpRequest。

更多现代浏览器,包括 Firefox,除了可以设置· on* ·属性外,也提供标准监听器 addEventListener() API来监听XMLHttpRequest事件。

三、两种获取服务器端响应方式的区别

区别描述 onload事件 onreadystatechange事件
是否兼容IE低版本 不兼容 兼容
是否需要判断Ajax状态码 不需要 需要
调用次数 一次 多次

推荐使用onload事件

司~夏 发布了314 篇原创文章 · 获赞 270 · 访问量 4万+ 私信 关注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐