Ajax

205 阅读6分钟

一、客户端与服务器

1.服务器

image.png

2.客户端

image.png

二、URL地址

1.概念

image.png

2.组成

image.png

三、分析网页的打开过程

1.客户端与服务器通信过程

image.png

2.基于浏览器的开发者工具分析

image.png

四、服务器对外提供了哪些资源

1.常见资源

image.png

2.数据也是一种资源

image.png

3.数据是网页的灵魂

image.png

4.网页中如何请求数据

image.png

5.资源的请求方式

image.png

五、Ajax

1.概念

Asynchronous Javascript And XML (异步Javascript 和XML)

通俗的理解:在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式,就是Ajax

最大的特点:可以在网页不刷新的情况下,向服务端发送http请求,得到http响应

AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式

2.作用

Ajax能让我们轻松实现网页与服务器之间的数据交互

最大的优势:无刷新获取数据。

image.png

3.优缺点

优点:

  • 可以无需刷新页面而与服务器端进行通信
  • 允许你根据用户事件来更新部分页面内容

缺点:

  • 没有浏览历史,不能回退
  • 存在跨域问题(同源)
  • SEO(搜索引擎优化)不友好

4.应用场景

  • 用户名检测

image.png

  • 搜索提示

image.png

  • 数据分页显示

image.png

5.发送ajax的四种方式

image.png

六、原生AJAX

1.XMLHttpRequest概念

image.png

2.使用xhr发起GET请求

  1. 创建xhr对象
  2. 调用xhr.open()函数,并指定参数
  3. 调用xhr.send()函数
  4. 监听xhr.onreadystatechange事件 (监听xhr对象的请求状态和服务器响应的状态)

注意:

了解xhr对象的readyState属性

image.png

  • 无参

image.png

image.png

  • 带参

image.png

image.png

注意:

查询字符串

image.png

image.png

3.使用xhr发起POST请求

  1. 创建xhr对象
  2. 调用xhr.open()函数
  3. 设置Content-Type属性(固定写法)
  4. 调用xhr.send()函数,同时指定要发送的数据
  5. 监听xhr.onreadystatechange事件 (监听xhr对象的请求状态和服务器响应的状态)

image.png

image.png

CONTENT-TYPE:application/x-www-form-urlencoded含义是表示客户端提交给服务器文本内容的编码方式 是URL编码,即除了标准字符外,每字节以双字节16进制前加个“%”表示

4.URL编码与解码

1.概念

image.png

2.如何对URL进行编码与解码

image.png

image.png

浏览器会自动编码,不需要程序员过多关注

七、XMLHttpRequest Level2的新特性

新旧对比

旧版XMLHttpRequest的缺点

  • 只支持文本数据的传输,无法用来读取和上传文件
  • 传送和接收数据时,没有进度信息,只能提示有没有完成

XML HttpRequest Level2新功能

  • 可以设置HTTP请求的时限
  • 可以使用FormData对象管理表单数据
  • 可以上传文件
  • 可以获得数据传输的进度信息

1.设置HTTP请求时限

image.png

image.png

2.FormData对象管理表单数据

  • 用法一:

image.png

image.png

  • 用法二:

image.png

image.png

3.上传文件

image.png

  • 定义UI结构

image.png

  • 验证是否选择了文件

image.png

  • 向formdata中追加文件

image.png

  • 发起上传文件请求并监听onreadystatechange事件

image.png

  • 完整

image.png

4.显示文件上传进度

image.png

image.png

一些问题解决

1.IE缓存问题解决

image.png

url不一样,浏览器会认为是两次不同的请求

2.超时设置与网络异常

image.png

到超时时间之后会自动取消请求

3.AJAX取消请求

image.png

4.AJAX请求重复发送问题

image.png

八、jQuery中的Ajax

1.介绍

image.png

2.$.get()函数的语法

image.png

  • 不带参

image.png

  • 带参

image.png

image.png

image.png

3.$post()函数的语法

image.png

image.png

image.png

4.$ajax()函数的语法

image.png

image.png

$.ajax还有很多其他选项

  • get

image.png

  • post

image.png

九、Axios

1.概念

Axios是专注于网络数据请求的库

相比于原生的XMLHttpRequest对象,axios简单易用

相比于jQuery,axios更加轻量化,只专注于网络数据请求

  • ajax和axios的区别

axios是通过Promise实现对ajax技术的一种封装,就像jquery对ajax的封装一样。简单来说就是ajax技术实现了局部数据的刷新,axios实现了对ajax的封装,axios有的ajax都有,ajax有的axios不一定有。总结一句话就是axios是ajax,ajax不止axios。

2.axios发起get请求

image.png

image.png

image.png

image.png

3.axios发起post请求

image.png

image.png

4.直接使用axios发起请求

image.png

注意:get请求通过params传参,post请求通过data传参

image.png

可以有很多配置项

十、fetch

image.png

十一、封装自己的Ajax函数

1.要实现的目标

image.png

2.处理data参数

需要把data对象,转化成查询字符串的格式,从而提交给服务器,因此提前定义resolveData函数如下:

image.png

3.定义itheima函数

image.png

4.判断请求的类型

image.png

  • 完整封装:

image.png

5.测试

  • GET

image.png

  • POST

image.png

十二、数据交换的格式

1.概念

数据交换格式,就是服务器与客户端之间进行数据传输与交换的格式。

前端领域,经常提及的两种数据交换格式分别是:XML和JSON。其中XML用的非常少,所以,我们重点要学习的数据交换格式就是JSON。

image.png

2.XML

(1)概念:

XML可扩展标记语言,HTML超文本标记语言

XML被设计用来传输和存储数据

XML和HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据

image.png

image.png

(2)和HTML的区别(无任何关系):

image.png

(3)缺点:

image.png

3.JSON

(1)概念

image.png

(2)JSON的两种结构

  • 对象结构

image.png

  • 数组结构

image.png

(3)JSON语法注意事项

image.png

(4)JSON和JS对象的关系

image.png

互转的方法:

  • JSON -> JS

JSON.parse() image.png

image.png

  • JS -> JSON

JSON.stringify()

image.png

image.png

(5)序列化和反序列化

image.png

手动转化

image.png

自动转化

image.png

注意:

  1. 原生ajax通过JSON.parse或者xhr.responseType指定请求体类型

image.png

  1. jq封装的ajax,.get.get和.post通过设置第四个参数,$.ajax通过设置dataType

image.png

image.png

  1. axios已经自动把请求体转为对象形式

十三、HTTP协议请求报文与响应文本结构

image.png

image.png

注意:请求报文是get的话,没有请求体

image.png

image.png

十四、跨域

  • 同源策略:是浏览器的一种安全机制(ajax默认遵循同源策略)

  • 同源:协议、主机、端口号 必须完全相同

  • 违背同源策略就是跨域

十五、接口

1.概念

image.png

2.分析接口的请求过程

image.png

image.png

3.接口文档

image.png

image.png

十六、Form表单

1.概念

image.png

2.组成部分

image.png

3.< form >标签的属性

  1. action

image.png

  1. target

image.png

image.png

  1. method

image.png

get方式将数据通过url地址提交

post方式将数据通过Form Data提交

注意:

get方式适合用来提交少量的、简单的数据

post方式适合用来提交大量的、复杂的、或包含文件上传的数据

  1. enctype

image.png

涉及到表单中文件上传时,必须要用第二种,否则就用第一种(默认)

4.表单的同步提交及缺点

通过点击submit按钮,触发表单提交的操作,从而使页面跳转到action URL的行为,叫做表单的同步提交

image.png

十七、通过Ajax提交表单数据

1.监听表单的提交事件

image.png

2.阻止表单默认提交行为

event.preventDefault() image.png

3.快速获取表单中的数据

通过serialize() 函数可以快速获取表单中的数据,而不需要一个一个获取DOM元素进行操作

image.png

image.png

注意:使用serialize()函数一定要给每个表单元素添加name属性,且不能重名!!!

image.png

image.png

image.png