📔
饥人谷前端体系课程笔记
黑马程序员笔记前端面试押题前端精进
  • 课程大纲
  • Git入门
    • 3. 软件安装详解
    • 4. Mac环境搭建
    • 5. 命令行入门
    • 6. 本地仓库
    • 7. Git远程仓库-GitHub
  • HTML全解
    • 8. HTML概览
    • 9. HTML标签
    • 10. HTML重难点
    • 11. HTML实践 & 手机调试
  • CSS全解
    • 12. CSS基础
    • 13. CSS布局(上)
    • 14. CSS布局(下)
    • 15. CSS定位
    • 16. CSS动画
  • HTTP全解
    • 17. URL 是什么
    • 18. 请求和响应 & Node.js Server
  • JS全解
    • 19. JavaScript概览
    • 20. 内存图与JS世界(精品课)
    • 21. Canvas 实践—画图板
    • 22. JS语法
    • 23. JS数据类型
    • 24. JS 对象
    • 25. JS 对象分类
    • 26. JS 数组
    • 27. JS 函数
    • 28. JS 实战,会动的代码
    • 29. JS运算符
    • 30. JS总结
  • JS编程接口
    • 31. DOM编程
    • 32. 手写DOM库
    • 33. JQuery中的设计模式(上)
    • 34. JQuery中的设计模式(下)
    • 35. DOM事件与事件委托
  • 项目 前端导航站点
    • 前端导航项目笔记
  • 前后分离
    • 40. AJAX的原理
    • 41. 异步与Promise
    • 42. 跨域、CORS、JSONP
    • 43. 静态服务器
    • 44. AJAX实战:Cookie、Session
  • JS进阶MVC
    • 48. MVC(上)
    • 49. MVC(中)
    • 50. MVC(下)
  • 项目构建
    • 51. Webpack(上)
    • 52. Webpack(下)
  • 算法与数据结构
    • 62. 伪代码与流程图
  • React全解
    • 75. React起手式
    • 76. React类组件和函数组件
    • 77. Class组件详解
    • 78. 函数组件
    • 79. Hooks原理解析
    • 80. Hooks各个击破
    • 81. 精通Redux
  • Node.js
    • 84. Node.js技术架构
    • 85. 文件模块
    • 86. 单元测试之文件模块
    • 87. 调试 Node.js 程序
    • 88. 静态服务器
    • 89. 命令行翻译工具
    • 90. 操作数据库
    • 91. 数据库基础知识
    • 92. Stream 流
    • 93. child_process
    • 94. 总结
  • TypeScript
    • 112. 基础
    • 113. 泛型
  • Next.js全解
    • Next.js 上
    • Next.js 下
  • ES6精讲
    • Promise,async/await
  • 大屏可视化笔记
    • 大屏可视化项目
  • SCSS全解
    • SCSS全解
  • 拓展
    • 一次性弄懂性能优化
    • Web性能优化
由 GitBook 提供支持
在本页
  • 背景
  • 挑战1
  • 挑战2
  • 挑战3
  • 挑战4
  • 总结
  • 新的挑战
  • 挑战5
  • window.JSON
  • 综合应用-加载分页
  • 加载列表
  • 课后作业

这有帮助吗?

  1. 前后分离

40. AJAX的原理

AJAX全称是Async JavaScript and XML。

用JS发请求和收响应,这就是AJAX的全部内容。

背景

  • AJAX 是浏览器上的功能

    • 浏览器可以发请求,收响应

    • 浏览器在 window 上加了一个 xMLHttpRequest 函

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

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

  • 准备一个服务器

    • 使用 serveris 作为我们的服务器

    • 下载或复制代码即可用node server.js 8888 启动

    • 添加 index.html / main.js 两个路由

挑战1

  • 加载 CSS

以前我们用

今天请用 AJAX 加载 CSS

  • 四个步骤

  1. 创建 HttpRequest 对象(全称是 XMLHttpRequest)

  2. 调用对象的 open 方法

  3. 监听对象的 onload & onerror 事件

  4. 一一专业前端会改用 onreadystatechange 事件

  5. 一一在事件处理函数里操作CSS 文件内容

  6. 调用对象的 send 方法(发送请求)

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

挑战2

  • 加载 JS

  • 以前我们用

  • 今天请用 AJAX 加载 JS

  • 四个步骤

  1. 创建 HttpRequest 对象(全称是 XMLHttpRequest)

  2. 调用对象的 open 方法

  3. 监听对象的 onreadystatechange 事件

  4. 一一在事件处理函数里操作JS 文件内容

  5. 调用对象的 send 方法(发送请求)

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

挑战3

  • 加载HTML

以前我们不会加载3.html

  • 四个步骤

  1. 创建HttpRequest对象(全称是XMLHttpRequest)调用对象的open方法

  2. 监听对象的 onreadystatechange事件

  3. 在事件处理函数里操作HTML文件内容

  4. 调用对象的 send方法(发送请求,

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

挑战4

  • 加载XML

以前我们不会加载4.xml

  • 四个步骤

  1. 创建HttpRequest对象(全称是XMLHttpRequest)调用对象的open方法

  2. 监听对象的 onreadystatechange事件

  3. 在事件处理函数里操作responseXML

  4. 调用对象的 send方法(发送请求)

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

总结

  • HTTP是个框,什么都能往里装可以装

可以装HTML、CSS、JS、XML...... 记得设置正确的 Content-Type,这是好习惯 只要你知道怎么解析这些内容,就可以使用这些内容

  • 解析方法

  1. 得到CSS之后生成 style标签

  2. 得到JS之后生成script标签

  3. 得到HTML之后使用innerHTML和 DOM API

  4. 得到XML之后使用responseXML和DOM API

  5. 不同类型的数据有不同类型的解析办法

新的挑战

  • 加载JSON......

  • 等下,什么是JSON?

    • JavaScript Object Notation

    • 嗯?名字里怎么有个JavaScript

JSON是一门语言 跟HTML、CSS、 XML、JS一样,是一门独立的语言

JSON不是编程语言是标记语言 跟HTML、XML、Markdown 一样,用来展示数据

JSON 很简单

一页纸就说明了JSON的所有语法 你会看铁轨图就会用JSON

支持的数据类型

  • string-只支持双引号,不支持单引号和无引号number-支持科学记数

  • bool-true 和 false

  • null-没有 undefined

  • object

  • array

  • 就这六种,注意跟 JS 的七种数据类型区别开来

  • 不支持函数, 不支持变量(所以也不支持引用)

JSON借(chao)鉴(xi)JS

挑战5

  • 加载 JSON

我们需要加载5.json

  • 四个步骤

  • 创建 HTTPREQUEST 对象 (全称是XMLHttpRequest)

  • 调用对象的 open 方法

  • 监听对象的 onreadystatechange事件

  • --在事件处理函数里使用 JSON.parse

  • 调用对象的send方法(发送请求)

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

window.JSON

  • JSON.parse

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

    • JSON字符串=> JS数据

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

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

    • 一半用try catch捕获错误

  • JSON.stringify

    • 是JSON.parse的逆运算

    • JS数据=> JSON字符串

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

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

综合应用-加载分页

加载列表

  • 需求

    • 用户打开页面,看到第一页数据

    • 用户点击下一页,看到第二页数据

    • 用户点击下一页,看到第三页数据

    • 用户点击下一页,提示没用更多了

  • 优化点

    • 能不能在点击第三页的时候就禁用下一页按钮

课后作业

  • 我已经写好server.js

你直接复制课程网页中提供的server.js到本地使用

  • 实现五个挑战

  1. 用AJAX加载CSS,并使其生效

  2. 用AJAX加载JS,并使其执行

  3. 用AJAX加载HTML,并使其出现在页面中

  4. 用AJAX加载XML,并获取其节点内容

  5. 用AJAX加载JSON,并将其转为对象

  6. 可选:用AJAX模拟分页操作

  7. 写好代码后.上传GitHub然后回复给我

上一页前后分离下一页41. 异步与Promise

最后更新于2年前

这有帮助吗?

截屏2023-04-15 上午1.34.45
中文官网