[关闭]
@zhenmin2233 2017-03-29T05:56:13.000000Z 字数 1794 阅读 151

AJAX


AJAX简介

获取登录页面

  1. // 创建 AJAX 对象
  2. var r = new XMLHttpRequest()
  3. // 设置请求方法和请求地址
  4. r.open('GET', '/login', true)
  5. // 注册响应函数
  6. r.onreadystatechange = function() {
  7. if(r.readyState == 4) {
  8. console.log('请求成功', r.responseText.length)
  9. }
  10. }
  11. // 发送请求
  12. r.send()

readyState什么意思:
0 (未初始化)
对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化)
已调用send()方法,正在发送请求
2 (发送数据)
send方法调用完成,但是当前的状态及http头未知
3 (数据传送中)
已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成)
// 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

发送登录数据

  1. // 创建 AJAX 对象
  2. var r = new XMLHttpRequest()
  3. // 设置请求方法和请求地址
  4. r.open('POST', '/login', true)
  5. // 设置发送的数据的格式
  6. r.setRequestHeader('Content-Type', 'application/json')
  7. // 注册响应函数
  8. r.onreadystatechange = function() {
  9. if (r.readyState === 4) {
  10. console.log('state change', r, r.status, r.response)
  11. var response = JSON.parse(r.response)
  12. console.log('response', response)
  13. } else {
  14. console.log('change')
  15. }
  16. }
  17. // 发送请求
  18. var account = {
  19. username: 'gua',
  20. password: '123',
  21. }
  22. var data = JSON.stringify(account)
  23. r.send(data)

可以封装成这样的一个函数

  1. var ajax = function(method, path, headers, data, reseponseCallback) {
  2. var r = new XMLHttpRequest()
  3. // 设置请求方法和请求地址
  4. r.open(method, path, true)
  5. // 设置发送的数据的格式
  6. r.setRequestHeader('Content-Type', 'application/json')
  7. // 注册响应函数
  8. r.onreadystatechange = function() {
  9. if(r.readyState === 4) {
  10. reseponseCallback(r)
  11. }
  12. }
  13. // 发送请求
  14. r.send(data)
  15. }
  16. ajax('GET', '/login', null, '', function(r){
  17. console.log(r.status, r.response)
  18. })

只发请求没有需要数据的用GET,要数据的就是POST

  1. ajax('GET', 'https://api.douban.com/v2/book/1220562', null, '', function(r){
  2. // console.log(r.status, book)
  3. var book = JSON.parse(r.response)
  4. var imgUrl = book.image
  5. var body = document.querySelector('body')
  6. var img = `
  7. <img src=${imgUrl}>
  8. `
  9. body.insertAdjacentHTML('beforeend', img)
  10. })
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注