XMLHttpRequest API总结
属性:
readyState
xhr的状态码 4 响应体接收完毕status
获取状态码responseText
获取响应体,文本格式responseXML
获取响应体,xml格式onreadtstatechange
事件,当xhr.readyState
属性发生改变触发onload
事件,响应接收完毕
方法:
open(method, url, async)
设置请求的方式,请求的路径,同步/异步send(requestBody)
发送请求体setRequestHeader(key, value)
设置请求头getResponseHeader(key)
获取响应头
请求的方式
onload
:方便获取响应的事件
GET
- 创建
xhr
对象- 调用
open
方法,设置请求方式和URL
- 调用
send
方法,发送- 当请求响应过程结束了(调用了
xhr.onload
事件),通过responseText
属性接收服务器返回的数据ajax
的get
请求
document.getElementById('btn').onclick = function () {
// 创建xhr对象
let xhr = new XMLHttpRequest()
// 调用open方法,设置请求方式和URL
xhr.open('GET', 'http://127.0.0.1:3000/search')
// 调用send方法,发送
xhr.send()
// 当请求响应过程结束了(调用了xhr.onload事件),通过responseText属性接收服务器返回的数据
xhr.onload = function () {
console.log(xhr.responseText)
}
}
注意:GET
请求 IE
缓存及解决方案
- 原因:两次请求的
url
完全一致,第二次请求的时候,IE
不会向服务器再次发请求了 ,而是使用第一次请返回的结果 - 解决:让每次请求的
url
不一致,可以加时间戳参数
POST
- 创建
xhr
对象- 调用
open
方法,设置请求方式和URL
- 调用
setRequestHeader( )
方法,设置header
头,指定content-type
- 调用
send
方法,发送- 当请求响应完毕,接收服务器返回的数据
// 创建xhr对象
let xhr=new XMLHttpRequest()
// 调用open方法,设置请求方式和URL
xhr.open('POST', 'http://127.0.0.1:3000/search')
// 调用setRequestHeader( )方法,设置header头,指定content-type
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
// 调用send方法,发送
xhr.send('x=11111')
// 当请求响应完毕,接收服务器返回的数据
xhr.onreadystatechange=function(){
if (xhr.readyState===4 || xhr.status===200) {
console.log(xhr.responseText);
}
}
基础get方式和post方式的区别
ajax
的GET
请求和ajax
的post
请求,传递参数的位置不一样GET
请求只能携带少量的参数,POST
请求携带的数据没有限制- 只有
POST
方式的请求才能够上传文件
onreadystatechange和readyState
readyState
xhr
的5种状态
readyState
的值为4,表示浏览器已经完全接收到了服务器返回的数据
readyState | 状态描述 | 说明 |
---|---|---|
0 | UNSENT | 代理(XHR)被创建,但尚未调用 open() 方法 |
1 | OPENED | open() 方法已经被调用,建立了连接。 |
2 | HEADERS_RECEIVED | send() 方法已经被调用,并且已经可以获取状态行和响应头。 |
3 | LOADING | 响应体下载中,responseText 属性可能已经包含部分数据。 |
4 | DONE | 响应体下载完成,可以直接使用responseText 。 |
onreadystatechange
- ajax执行状态发生改变(当
readyState
的值发生变化的时候)会触发 - 当接收到的数据发生变化,也会触发该事件
- 他可以代替
onload
事件
同步与异步
xhr.open( )
第三个参数传入布尔值- 作用就是设置此次请求是否采用异步方式执行,默认为
true
异步,false
为同步 同步请求
ajax
的同步请求,会在send
方法那里被卡住,什么时候服务器返回数据了,后续代码才能执行,不赞成使用- 异步请求
ajax
的异步请求,不会阻塞后续代码执行,赞成使用
兼容
IE5、IE6:没有
XMLHttpRequest
对象var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
总结
Ajax
就是浏览器提供的一套 API
,可以通过 JavaScript
调用,从而实现通过代码控制请求与响应,实现网络编程。
本篇到此结束,大家感觉还实用的话,关注或者点个赞都可以,谢谢啦!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。