XMLHttpRequest发起GET请求
步骤:
1.创建xhr对象
2.调用 xhr.open()函数
3.调用 xhr.send()函数
4.监听 xhr.onreadystatechange 事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var xhr = new XMLHttpRequest();
xhr.open('GET','http://www.liulongbin.top:3006/api/getbooks');
xhr.send();
xhr.onreadystatechange = () => { if(xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }
|
了解xhr对象的readyState属性
XMLHttpRequest 对象的 readyState 属性,用来表示当前 Ajax 请求所处的状态。每个 Ajax 请求必然处于以下状态中的一个:
值 |
状态 |
描述 |
0 |
UNSENT |
XMLHttpRequest 对象已被创建,但尚未调用 open方法 |
1 |
OPENED |
open() 方法已经被调用 |
2 |
HEADERS_RECEIVED |
send() 方法已经被调用,响应头也已经被接收 |
3 |
LOADING |
数据接收中,此时 response 属性中已经包含部分数据 |
4 |
DONE |
Ajax 请求完成,这意味着数据传输已经彻底完成或失败 |
XMLHttpRequest发起POST请求
1.创建 xhr对象
2.调用 xhr.open()函数
3.设置 Content-Type属性(固定写法)
4.调用 xhr.send()函数,同时指定要发送的数据
5.监听 xhr.onreadystatechange 事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var xhr = new XMLHttpRequest();
xhr.open('POST','http://www.liulongbin.top:3006/api/addbook');
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send('bookname=水浒传&author=施耐庵&publisher=天津图书出版社')
xhr.onreadystatechange = () => { if(xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }
|
封装自己的Ajax函数
要实现的效果
1 2 3 4 5 6 7 8 9 10 11
| ajax({ method: '请求类型', url: '请求地址', data: { 请求参数对象 }, success: (res) => { console.log(res); } })
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
function resolveData(data) { let arr = []; for(let k in data) { arr.push(k + '='+ data[k]); } return arr.join('&'); }
function ajax(options) { let xhr = new XMLHttpRequest(); let qs = resolveData(options.data);
xhr.onreadystatechange = () => { if(xhr.readyState === 4 && xhr.status === 200) { let result = JSON.parse(xhr.responseText); options.success(result); } } if(options.method.toUpperCase() === 'GET') { xhr.open(options.method,options.url+ '?' + qs); xhr.send() } else if(options.method.toUpperCase() === 'POST') { xhr.open(options.method,options.url); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send(qs); } }
|