属性:
readyState
xhr的状态码 4 响应体接收完毕status
获取状态码responseText
获取响应体,文本格式responseXML
获取响应体,xml格式onreadtstatechange
事件,当xhr.readyState
属性发生改变触发onload
事件,响应接收完毕方法:
open(method, url, async)
设置请求的方式,请求的路径,同步/异步send(requestBody)
发送请求体setRequestHeader(key, value)
设置请求头getResponseHeader(key)
获取响应头onload
:方便获取响应的事件
- 创建
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
不一致,可以加时间戳参数
- 创建
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);
}
}
ajax
的 GET
请求和 ajax
的 post
请求,传递参数的位置不一样GET
请求只能携带少量的参数,POST
请求携带的数据没有限制POST
方式的请求才能够上传文件xhr
的5种状态
readyState
的值为4,表示浏览器已经完全接收到了服务器返回的数据
readyState | 状态描述 | 说明 |
---|---|---|
0 | UNSENT | 代理(XHR)被创建,但尚未调用 open() 方法 |
1 | OPENED | open() 方法已经被调用,建立了连接。 |
2 | HEADERS_RECEIVED | send() 方法已经被调用,并且已经可以获取状态行和响应头。 |
3 | LOADING | 响应体下载中,responseText 属性可能已经包含部分数据。 |
4 | DONE | 响应体下载完成,可以直接使用responseText 。 |
readyState
的值发生变化的时候)会触发onload
事件xhr.open( )
第三个参数传入布尔值true
异步,false
为同步ajax
的同步请求,会在 send
方法那里被卡住,什么时候服务器返回数据了,后续代码才能执行,不赞成使用ajax
的异步请求,不会阻塞后续代码执行,赞成使用XMLHttpRequest
对象var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
Ajax
就是浏览器提供的一套 API
,可以通过 JavaScript
调用,从而实现通过代码控制请求与响应,实现网络编程。
本篇到此结束,大家感觉还实用的话,关注或者点个赞都可以,谢谢啦!