这篇文章是给 NCUHOME 研发组新生有关 DOM
操作和 AJAX
的培训文档
主讲人: 19 级前端 Viki,时间:2020/10/30
参考了 MDN 文档、《JavaScript 高级程序设计(第四版)》以及一些博客文章的相关内容。
预习部分
学有余力还可以进一步学习: Fetch API - MDN / Axios - Github
从浏览器讲起
主流浏览器
浏览器的高层结构
浏览器解析过程
DOM
什么是 DOM
JavaScript 包含以下三个组成部分。
- ECMAScript: 由 ECMA-262 定义, js 语言的核心功能。
- 文档对象模型(DOM): 提供了与网页内容交互的方法和接口。
- 浏览器对象模型(BOM): 提供了与浏览器交互的方法和接口。
DOM(Document Object Model)中文名叫文档对象模型,它是 HTML(超文本标记语言)和 XML(可扩展标记语言)文档的应用编程接口(也叫 API,Application Programming Interface)。
DOM 表示由多层节点构成的文档,通过它可以对页面的各个部分进行添加、删除和修改等操作。
DOM 相关概念
元素
即 document 文档里所有的 HTML 标签元素 如下图的 Element Node
节点
节点包括元素节点、文本节点、注释节点等
最常用的节点是元素节点和文本节点
操作 DOM 节点
获取 HTML 元素
获取到一个元素有很多种方式,比如: 通过 id、标签名、CSS 类等
1 | // 创建一个元素 |
操作 HTML 元素
改变 HTML 元素样式
1 | // 首先获取到要改变样式的元素 |
JavaScript 的标识符不允许使用
-
,所以 JavaScript 里的 CSS 样式名都是小驼峰的命名形式。例如:CSS =>font-size
/ JavaScript =>fontSize
添加、改变 HTML 元素
1 | document.body.innerText = '这是body的innerText' |
给 HTML 元素添加监听事件
1 | // let msg = () => alert("hello! ncuhomer!"); |
AJAX
何为 AJAX
AJAX 是异步的 JavaScript 和 XML(Asynchronous JavaScript And XML)。简单点说,即使用 XMLHttpRequest
对象与服务器通信。 使用 AJAX 可以在不重新刷新页面的情况下与服务器通信,交换数据,或更新页面。
为什么要有 AJAX
没有 AJAX 的时代
除了img
标签加载图片之外,一切数据请求,包括获取新信息、访问新页面等,页面都要进行重新加载。
有 AJAX 的时代
使用 JavaScript 通过XMLHttpRequest
对象向服务器发起请求,获取到返回数据。不用刷新页面就可以异步更新页面内容,极大的提高了用户体验和效率。典型的代表: Gmail 和 Google Map
JSON 格式
JSON (JavaScript Object Notation) 是目前最常用的数据交换格式,虽然它是基于 JavaScript 语法,但它独立于 JavaScript。
例子
1 | { |
处理 JSON 数据(与 js 对象的相互转换)
1 | let str1 = '{"name":"ncuhomer"}' |
原生 XMLHttpRequest 的基本使用
HTTP 的请求方法
GET
: 获取资源
POST
: 主要用于修改服务器资源
除此之外还有:
PUT
、HEAD
、DELETE
、OPTIONS
、CONNECT
等
1. 创建一个实例对象
1 | var xhr = new XMLHttpRequest() |
2. 设置请求参数
1 | xhr.open('GET', 'url') |
3. 监听请求后的变化
1 | xhr.onreadystatechange = function () { |
4. 发送请求
1 | xhr.send() |
深入了解参考:XMLHttpRequest - MDN
Fetch 与 Axios
Fetch 基于 XMLHttpRequest
做了一层封装,通过 Fetch 可以更以简单的方式来间接使用 XMLHttpRequest
获取数据。Fetch 现在已经被除 IE 外的大多数浏览器内置支持。
Axios 是一个基于 promise
的 HTTP 库。它来自开源社区,底层实现也是XMLHttpRequest
对象,在实际开发生产中的使用的比较广泛。
使用 ES6
ES
ES 指的是 ECMAScript,是 js 语言的核心部分。
ES6 中的 6 是 ES 的版本标识,是 ES5 的下一个版本,在 2015 年发布,又叫 ECMAScript 2015,ES6 引入了很多新特性,丰富了 js 的语法生态。ES6 引入的新特性和规范等对 JavaScript 使用者更加友好。
ES5 的缺陷
- var 定义变量存在变量提升问题,允许重复声明
- 变量的作用域为函数作用域
- 对字符的处理有限。
- 异步编程相对繁琐,只能通过回调函数、事件监听或者自行编写 Promise 来实现。
- 缺少语法糖,对编程人员不够友好。
关于语法糖: 指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
ES6 的亮点
原生支持 Promise,简化了异步编程。
新增 let、const 关键字
用 let const 定义的变量作用域为块作用域,不存在变量提升,不允许重复声明,使语言使用更加严谨
引入箭头函数,让 this 绑定定义时所在的作用域,而不是指向运行时所在的作用域,同时也使得表达更加简洁。
引入 class 关键字,增强了对类的支持
新增语法糖
- 模板字符串
- 解构操作
- 展开运算符
- …
…
课后学习、阅读资料:
学习 JavaScript
红宝书(《JavaScript 高级程序设计(第四版)》)
大部分书籍的电子版可以在研发 QQ 群文件找到
推荐学习
推荐阅读
任务
学习任务
本周任务主要是学习 HTTP、DOM 操作和 AJAX,同时多了解 ES6 的新特性。
学习:
建议深入了解:
推荐阅读
本周作业
主要内容
使用原生 XMLHttpRequest
编写一个网页,网页主体内容包括两个按钮和一行文字。要求实现: 点击第一个按钮后,通过原生 XMLHttpRequest
向 https://v1.hitokoto.cn/?encode=text
发起 GET
请求并使用 DOM
操作将内容显示在页面上;点击第二个按钮后,文字的样式被改变。
在完成主要特征的前提下可自由发挥。(如:调整布局、美化页面、添加文本信息等)
最终效果参考:
提交方式
将源代码通过 git
推送到 Homework-Y20M11W1
仓库的新分支上,并提交 PR(pull request)。
截止时间
2020 年 11 月 4 日晚十点