AJAX
(一)Ajax运行原理:
Ajax相当于浏览器发送请求与接收响应的代理人,以实现在不影响用户浏览页面的情况下,局部更新页面数据,从而提高用户体验。
(二)Ajax运行步骤:
1)创建Ajax对象
var xhr
= new XMLHttpRequest();
2)告诉Ajax请求地址以及请求方式
xhr
.open('get','http://www.baidu.com');
3)发送请求
xhr
.send();
4)获取服务器端与客户端的响应数据
xhr
.onload = function(){
console
.log(xhr
.responseText
);
}
(三)Ajax请求参数方式:
1)GET请求方式
xhr
.open('get', 'http://localhost:3000/get?name=zs&age=20');
2)POST请求方式
xhr
.open('post', 'http://localhost:3000/post');
xhr
.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr
.send('name=zs&age=20');
(四)Ajax请求参数的格式:
1)application/x-www-form-urlencoded(请求参数为拼接字符串)
name
=zs
&age
=20&sex
=男
2)application/json(请求参数格式是json,get请求不能提交json对象数据格式,传统的表单提交也不支持json对象数据格式)
var json
= {
name
:'zs',
age
:20,
sex
:'男'
}
JSON.stringify(json
)
(五)获取服务端响应
Ajax状态码
在创建ajax对象,配置ajax对象,发送请求,以及接收完服务器端响应数据,这个过程中的每一个步骤都会对应一个数值,这个数值就是ajax状态码,ajax对象返回的。
xhr
.readyState
0:请求未初始化(还没有调用open())
var xhr
= new XMLHttpRequest();
1∶请求已经建立,但是还没有发送(还没有调用send())
xhr
.open('get','http://localhost:3000/readystate');
2:请求已经发送 3∶请求正在处理中,通常响应中已经有部分数据可以用了 4:响应已经完成,可以获取并使用服务器的响应了
xhr
.onreadystatechange = function(){
}
(六)Http状态码
HTTP状态码表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常或者是出现的错误,能够根据返回的状态码判断请求是否得到正确的处理很重要(请求的处理结果,是服务端返回的)。
xhr
.status
1、状态码分类
2、常用状态码
1)200 OK:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果。
2)403 Forbidden:服务器拒绝该次访问(访问权限出现问题)。
3)404 Not Found:请求失败,客户端请求的资源没有找到或者是不存在。
4)500 Inter Server Error:服务器遇到未知的错误,导致无法完成客户端当前的请求。
5)503 Server Unavailable:服务器由于临时的服务器过载或者是维护,无法解决当前的请求。
(七)Ajax封装
1)不传参数
function ajax(options
){
var xhr
= new XMLHttpRequest();
xhr
.open(options
.type
,options
.url
);
xhr
.send();
xhr
.onload = function() {
options
.success(xhr
.responseText
);
}
}
ajax({
type
:'get',
url
:'http://localhost:3000/first',
success
:function(data
){
console
.log(data
)
}
})
2)传参数
function ajax(options
) {
var defaults
= {
type
: 'get',
url
: '',
data
: {},
header
: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success
: function () {},
error
: function () {}
}
Object
.assign(defaults
, options
);
var xhr
= new XMLHttpRequest();
var params
= '';
for (var attr
in defaults
.data
) {
params
+= attr
+ '=' + defaults
.data
[attr
] + '&'
}
params
= params
.substr(0, params
.length
- 1)
if (defaults
.type
== 'get') {
defaults
.url
= defaults
.url
+ '?' + params
}
xhr
.open(defaults
.type
, defaults
.url
);
if (defaults
.type
== 'post') {
var ContentType
= defaults
.header
['Content-Type']
xhr
.setRequestHeader('Content-Type', ContentType
);
if (ContentType
== 'application/json') {
xhr
.send(JSON.stringify(defaults
.data
))
} else {
xhr
.send(params
)
}
} else {
xhr
.send();
}
xhr
.onload = function () {
var contenTtype
= xhr
.getResponseHeader('Content-Type')
var responseText
= xhr
.responseText
if (contenTtype
.includes('application/json')) {
responseText
= JSON.parse(responseText
)
}
if (xhr
.status
== 200) {
defaults
.success(responseText
, xhr
);
} else {
defaults
.error(responseText
, xhr
)
}
}
}
ajax({
url
: 'http://localhost:3000/first',
data
: {
name
: 'zs',
age
: 20
},
success
: function (data
, xhr
) {
console
.log(data
, xhr
)
},
})