@zhenmin2233
2017-03-29T05:56:13.000000Z
字数 1794
阅读 151
// 创建 AJAX 对象var r = new XMLHttpRequest()// 设置请求方法和请求地址r.open('GET', '/login', true)// 注册响应函数r.onreadystatechange = function() {if(r.readyState == 4) {console.log('请求成功', r.responseText.length)}}// 发送请求r.send()
readyState什么意思:
0 (未初始化)
对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化)
已调用send()方法,正在发送请求
2 (发送数据)
send方法调用完成,但是当前的状态及http头未知
3 (数据传送中)
已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成)
// 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
// 创建 AJAX 对象var r = new XMLHttpRequest()// 设置请求方法和请求地址r.open('POST', '/login', true)// 设置发送的数据的格式r.setRequestHeader('Content-Type', 'application/json')// 注册响应函数r.onreadystatechange = function() {if (r.readyState === 4) {console.log('state change', r, r.status, r.response)var response = JSON.parse(r.response)console.log('response', response)} else {console.log('change')}}// 发送请求var account = {username: 'gua',password: '123',}var data = JSON.stringify(account)r.send(data)
可以封装成这样的一个函数
var ajax = function(method, path, headers, data, reseponseCallback) {var r = new XMLHttpRequest()// 设置请求方法和请求地址r.open(method, path, true)// 设置发送的数据的格式r.setRequestHeader('Content-Type', 'application/json')// 注册响应函数r.onreadystatechange = function() {if(r.readyState === 4) {reseponseCallback(r)}}// 发送请求r.send(data)}ajax('GET', '/login', null, '', function(r){console.log(r.status, r.response)})
只发请求没有需要数据的用GET,要数据的就是POST
ajax('GET', 'https://api.douban.com/v2/book/1220562', null, '', function(r){// console.log(r.status, book)var book = JSON.parse(r.response)var imgUrl = book.imagevar body = document.querySelector('body')var img = `<img src=${imgUrl}>`body.insertAdjacentHTML('beforeend', img)})