背景

AJAX是浏览器上的功能,可以发请求和接受相应。

浏览器在window.上加了一个XML HttpRequest函数

用这个构造函数(类)可以构造出一个对象

JS通过它实现发请求,收响应

配置node-dev

  1. // 安装
  2. yarn global add node-dev
  3. // 开始监听一个服务器
  4. node-dev server.js 8888

加载CSS

  1. 创建HttpRequest对象(全称是XMLHttpRequest)
  2. 调用对象的open方法
  3. 监听对象的onload & onerror 事件
  4. 专业前端会改用onreadystatechange事件
  5. 在事件处理函数里操作CSS文件内容
  6. 调用对象的send方法(发送请求)

具体代码请打开MDN用CRM大法搞定

  1. // 第一步
  2. const request = new XMLHttpRequest()
  3. // 第二步
  4. request.open("GET", "/style.css")
  5. // 第三步
  6. request.onload = () => {
  7. console.log("成功了")
  8. }
  9. request.onerror = () => {
  10. console.log("失败了")
  11. }
  12. // 第四步
  13. request.send()

高级写法

  1. const request = new XMLHttpRequest()
  2. request.open("GET", "/style.css")
  3. request.onreadystatechange = () => {
  4. console.log(request.readyState)
  5. if (request.readyState === 4) {
  6. console.log("下载完成")
  7. // 成功的状态码在200-300以内 失败的状态码在300以上
  8. if (request.status >= 200 && request.status < 300) {
  9. const style = document.createElement("style")
  10. style.innerHTML = request.response
  11. document.head.appendChild(style)
  12. } else {
  13. alert("加载CSS失败")
  14. }
  15. }
  16. }
  17. request.send()

加载JS

  1. 创建HttpRequest对象(全称是XMLHttpRequest)
  2. 调用对象的open方法
  3. 监听对象的onreadystatechange 事件
  4. 在事件处理函数里操作JS文件内容
  5. 调用对象的send方法(发送请求)
  6. 具体代码请打开MDN用CRM大法搞定
  1. // 第一步
  2. const request = new XMLHttpRequest()
  3. // 第二步
  4. request.open("GET", "/2.js")
  5. // 第三步
  6. request.onload = () => {
  7. console.log("2.js 成功了")
  8. // 在网页创建script标签 并插入相关代码
  9. const script = document.createElement("script")
  10. script.innerHTML = request.response
  11. document.body.appendChild(script)
  12. }
  13. request.onerror = () => {
  14. console.log("失败了")
  15. }
  16. // 第四步
  17. request.send()

高级写法

  1. const request = new XMLHttpRequest()
  2. request.open("GET", "/2.js")
  3. request.onreadystatechange = () => {
  4. console.log(request.readyState)
  5. if (request.readyState === 4) {
  6. console.log("下载完成")
  7. // 成功的状态码在200-300以内 失败的状态码在300以上
  8. if (request.status >= 200 && request.status < 300) {
  9. const script = document.createElement("script")
  10. script.innerHTML = request.response
  11. document.body.appendChild(script)
  12. } else {
  13. alert("加载JS失败")
  14. }
  15. }
  16. }
  17. request.send()

加载HTML

  1. 创建HttpRequest对象(全 称是XMLHttpRequest)
  2. 调用对象的open方法
  3. 监听对象的onreadystatechange事件
  4. 在事件处理函数里操作HTML文件内容
  5. 调用对象的send方法(发送请求)
  6. 具体代码请打开 MDN用CRM大法搞定
  1. const request = new XMLHttpRequest()
  2. request.open("GET", "/3.html")
  3. request.onload = () => {
  4. console.log("3.html加载成功了")
  5. const div = document.createElement("div")
  6. div.innerHTML = request.response
  7. document.body.appendChild(div)
  8. }
  9. request.onerror = () => {
  10. console.log("失败了")
  11. }
  12. request.send()

高级写法

  1. const request = new XMLHttpRequest()
  2. request.open("GET", "/3.html")
  3. request.onreadystatechange = () => {
  4. console.log(request.readyState)
  5. if (request.readyState === 4) {
  6. console.log("下载完成")
  7. // 成功的状态码在200-300以内 失败的状态码在300以上
  8. if (request.status >= 200 && request.status < 300) {
  9. const div = document.createElement("div")
  10. div.innerHTML = request.response
  11. document.body.appendChild(div)
  12. } else {
  13. alert("加载HTML失败")
  14. }
  15. }
  16. }
  17. request.send()

加载XML

  1. 创建HttpRequest对象(全称是XMLHttpRequest)
  2. 调用对象的open方法
  3. 监听对象的onreadystatechange事件
  4. 在事件处理函数里操作responseXML
  5. 调用对象的send方法(发送请求)
  6. 具体代码请打开 MDN用CRM 大法搞定
  1. const request = new XMLHttpRequest()
  2. request.open("GET", "/4.xml")
  3. request.onreadystatechange = () => {
  4. console.log("下载完成")
  5. if (
  6. request.readyState === 4 &&
  7. request.status >= 200 &&
  8. request.status < 300
  9. ) {
  10. const dom = request.responseXML
  11. const text = dom.getElementsByTagName("warning")[0].textContent
  12. console.log(text.trim())
  13. } else {
  14. alert("加载XML失败")
  15. }
  16. }
  17. request.send()

加载JSON(JS对象标记语言)

JSON.parse

将符合JSON语法的字符串转换成JS对应类型的数据

JSON字符串=> JS数据

由于JSON只有六种类型,所以转成的数据也只有6种

如果不符合JSON语法,则直接抛出一个Error对象

一半用try catch捕获错误

  1. let object
  2. try{
  3. object = JSON. parse("{ 'name':'frank'}")
  4. }catch(error){
  5. console.1og('出错了,错误详情是')
  6. console. log(error)
  7. object = {'name' :'null' }
  8. }
  9. console. log(object)

JSON.stringify

是JSON.parse的逆运算

JS数据=> JSON字符串

由于JS的数据类型比JSON多,所以不一定能成功

如果失败,就抛出一个Error对象

步骤

  1. 创建HttpRequest对象(全称是XMLHttpRequest)
  2. 调用对象的open方法
  3. 监听对象的onreadystatechange事件
  4. -在事件处理函数里使用JSON.parse
  5. 调用对象的send方法(发送请求)
  6. -具体代码请打开MDN用CRM大法搞定
  1. const request = new XMLHttpRequest()
  2. request.open("GET", "/5.json")
  3. request.onreadystatechange = () => {
  4. if (request.readyState === 4) {
  5. console.log("下载完成")
  6. // 成功的状态码在200-300以内 失败的状态码在300以上
  7. if (request.status >= 200 && request.status < 300) {
  8. console.log(request.response)
  9. const obj = JSON.parse(request.response)
  10. myName.textContent = obj.name.toLocaleUpperCase()
  11. } else {
  12. alert("加载JSON失败")
  13. }
  14. }
  15. }
  16. request.send()

错误事件解决

onreadystatechange

18 AJAX历史 - 图1