前后端分离:Ajax的原理和使用

434 阅读3分钟

AJAX 是什么?

AJAX 全称 Async JavaScript and XML,即“异步的 JavaScript 和 XML”。

背景

过去,浏览器向服务器发送请求,服务器会返回一整个HTML页面去替换老页面。而AJAX可以进行轻量级请求,通过 JS 修改局部页面。

如何实现

浏览器可以发请求,收响应,浏览器在window上加了一个XMLHttpRequest函数,用这个构造函数(类)可以构造出一个对象,JS通过它实现发请求,收响应

//实现代码
const ajax = (method, url, data, success, fail) => {
    var request = new XMLHttpRequest()
    request.open(method, url)
    request.onreadystatechange = function() => {
        if(request.readyState === 4) {
            if(request.status >=200 && request.status < 300 || request.status ===304) {
                success(request)
            } else {
                fail(request)
            }
        }
    }
    request.send()
}

实战

源码

实战1 加载CSS

过去方法:

<link rel=stylesheet href="1.css"/>

AJAX加载CSS:

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

2.调用对象的open方法

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

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

onreadystatechange

onerror并不能很好的兼容AJAX,改用 onreadystatechange事件,在事件处理函数里操作CSS文件内容。

readyState属性

image-20210514205513694.png

实战2 加载JS

过去方法:

<script src="2.js"></script>

AJAX加载JS

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

2.调用对象的open方法

3.监听对象的onreadystatechange事件

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

实战3 加载HTML

过去还不会加载html

AJAX加载HTML

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

2.调用对象的open方法

3.监听对象的onreadystatechange事件

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

实战4 加载XML

过去不会加载xml

AJAX加载XML

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

2.调用对象的open方法

3.监听对象的onreadystatechange事件,在事件处理函数里操作responseXML

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

实战5 加载JSON

JSON

什么是JSON

JavaScript Object Notation,跟HTML、CSS、XML、JS一样,是一门独立的语言。JSON不是编程语言,是标记语言,跟HTML、XML、Markdown,用来展示数据。

中文官网

支持的数据类型

string 只支持双引号,不支持单引号和无引号

number 支持科学计数法

bool true 和 false

null 没有undefined

object

array

JSON支持这六种,注意跟JS的数据类型区别开(array在JS数据类型中术语object类)

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

AJAX加载JSON

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

2.调用对象的open方法

3.监听对象的onreadystatechange事件,在事件处理函数里使用JSON.parse

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

window.JSON

JSON.parse

用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。

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

JSON字符串 => JS数据

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

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

一般用try catch捕获错误

image-20210515004402969.png

  • 例1

    5.json中写入字符串如下

image-20210515003451227.png

main.js命令打印出JSON字符串和JS数据

image-20210515003754182.png

打印结果如下,JSON字符串转成JS对象

image-20210515003841511.png

  • 例2

    5.json写入true(布尔)

image-20210515004043736.png

main.js命令打印出JSON字符串和JS数据

image-20210515004749507.png

打印结果如下,将JSON字符串解析为布尔值true

image-20210515004824460.png

JSON.stringify

JSON.parse的逆运算

JS数据 => JSON字符串

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

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

总结

HTTP是个筐,什么都能往里装

可以装HTML、CSS、JS、XML……

记得设置正确的Conetnt-Type

解析方法

得到CSS之后生成style标签

得到JS之后生成script标签

得到HTML之后使用innerHTML 和 DOM API

得到XML之后使用responseXML 和 DOM API

不同诗句类型有不同数据类型的解析办法