1. 如何发送请求
- 通过form表单发送请求(包括get请求和post请求),会刷新页面或新开页面
- 通过a链接发送get请求,会刷新页面或新开页面
- 通过img标签发送get请求,必须将img标签插入页面才能发送请求,且只能以图片形式展示
- 通过link标签发送get请求,必须插入head才能发送请求,且只能以CSS或favicon的形式展示
- 通过script标签发送get请求,必须插入页面,但只能以脚本形式运行
使用AJAX
AJAX全称Asynchronous Javascript And XML,即异步的JavaScript和XML,AJAX允许以任意形式发送请求并且以任意形式展示。
符合如下技术的就叫做AJAX:
- 使用XMLHttpRequest发送请求
- 服务器返回XML格式的字符串
- 浏览器解析XML,并局部更新页面
let request = new XMLHttpRequest()
request.open('GET', '/xxx')
request.send()
上述代码中open的第一个参数指定了请求的方式,如上文所说,AJAX允许任意方式的请求,因此POST、PUT、DELETE甚至程序员自己创造的方式都是允许的(只不过服务器不接受就是了23333)。
完整的AJAX
let request = new XMLHttpRequest()
request.open('GET', '/xxx') // 配置request
request.send()
request.onreadystatechange = ()=>{
if(request.readyState === 4){
console.log('请求响应都已经完成')
if(request.status >= 200 && request.status < 300){
console.log('说明请求成功')
}else if(request.status >= 400){
console.log('说明请求失败')
}
}
}
这部分的代码就通过 onreadystatechange
和 request.status
来判断请求响应是否完成和请求是否成功。
onreadystatechange
表示当 readystate
值改变的时候就会执行回调函数, readystate
一共有0~4五个值:
值 | 描述 |
---|---|
0 | 代理被创建,但尚未调用 open() 方法 |
1 | open() 方法已经被调用 |
2 | send() 方法已经被调用,并且头部和状态已经可获得 |
3 | 下载中; responseText 属性已经包含部分数据 |
4 | 下载操作已完成 |
request.status
就表示HTTP状态码分别有:1xx,2xx,3xx,4xx,5xx这一类值,用来表示HTTP请求成功与否。