背景
AJAX是浏览器上的功能,可以发请求和接受相应。
浏览器在window.上加了一个XML HttpRequest函数
用这个构造函数(类)可以构造出一个对象
JS通过它实现发请求,收响应
配置node-dev
// 安装yarn global add node-dev// 开始监听一个服务器node-dev server.js 8888
加载CSS
- 创建HttpRequest对象(全称是XMLHttpRequest)
 - 调用对象的open方法
 - 监听对象的onload & onerror 事件
 - 专业前端会改用
onreadystatechange事件 - 在事件处理函数里操作CSS文件内容
 - 调用对象的send方法(发送请求)
 
具体代码请打开MDN用CRM大法搞定
// 第一步const request = new XMLHttpRequest()// 第二步request.open("GET", "/style.css")// 第三步request.onload = () => {console.log("成功了")}request.onerror = () => {console.log("失败了")}// 第四步request.send()
高级写法
const request = new XMLHttpRequest()request.open("GET", "/style.css")request.onreadystatechange = () => {console.log(request.readyState)if (request.readyState === 4) {console.log("下载完成")// 成功的状态码在200-300以内 失败的状态码在300以上if (request.status >= 200 && request.status < 300) {const style = document.createElement("style")style.innerHTML = request.responsedocument.head.appendChild(style)} else {alert("加载CSS失败")}}}request.send()
加载JS
- 创建HttpRequest对象(全称是XMLHttpRequest)
 - 调用对象的open方法
 - 监听对象的
onreadystatechange事件 - 在事件处理函数里操作JS文件内容
 - 调用对象的send方法(发送请求)
 - 具体代码请打开MDN用CRM大法搞定
 
// 第一步const request = new XMLHttpRequest()// 第二步request.open("GET", "/2.js")// 第三步request.onload = () => {console.log("2.js 成功了")// 在网页创建script标签 并插入相关代码const script = document.createElement("script")script.innerHTML = request.responsedocument.body.appendChild(script)}request.onerror = () => {console.log("失败了")}// 第四步request.send()
高级写法
const request = new XMLHttpRequest()request.open("GET", "/2.js")request.onreadystatechange = () => {console.log(request.readyState)if (request.readyState === 4) {console.log("下载完成")// 成功的状态码在200-300以内 失败的状态码在300以上if (request.status >= 200 && request.status < 300) {const script = document.createElement("script")script.innerHTML = request.responsedocument.body.appendChild(script)} else {alert("加载JS失败")}}}request.send()
加载HTML
- 创建HttpRequest对象(全 称是XMLHttpRequest)
 - 调用对象的open方法
 - 监听对象的
onreadystatechange事件 - 在事件处理函数里操作HTML文件内容
 - 调用对象的send方法(发送请求)
 - 具体代码请打开 MDN用CRM大法搞定
 
const request = new XMLHttpRequest()request.open("GET", "/3.html")request.onload = () => {console.log("3.html加载成功了")const div = document.createElement("div")div.innerHTML = request.responsedocument.body.appendChild(div)}request.onerror = () => {console.log("失败了")}request.send()
高级写法
const request = new XMLHttpRequest()request.open("GET", "/3.html")request.onreadystatechange = () => {console.log(request.readyState)if (request.readyState === 4) {console.log("下载完成")// 成功的状态码在200-300以内 失败的状态码在300以上if (request.status >= 200 && request.status < 300) {const div = document.createElement("div")div.innerHTML = request.responsedocument.body.appendChild(div)} else {alert("加载HTML失败")}}}request.send()
加载XML
- 创建HttpRequest对象(全称是XMLHttpRequest)
 - 调用对象的open方法
 - 监听对象的onreadystatechange事件
 - 在事件处理函数里操作responseXML
 - 调用对象的send方法(发送请求)
 - 具体代码请打开 MDN用CRM 大法搞定
 
const request = new XMLHttpRequest()request.open("GET", "/4.xml")request.onreadystatechange = () => {console.log("下载完成")if (request.readyState === 4 &&request.status >= 200 &&request.status < 300) {const dom = request.responseXMLconst text = dom.getElementsByTagName("warning")[0].textContentconsole.log(text.trim())} else {alert("加载XML失败")}}request.send()
加载JSON(JS对象标记语言)
JSON.parse
将符合JSON语法的字符串转换成JS对应类型的数据
JSON字符串=> JS数据
由于JSON只有六种类型,所以转成的数据也只有6种
如果不符合JSON语法,则直接抛出一个Error对象
一半用try catch捕获错误
let objecttry{object = JSON. parse("{ 'name':'frank'}")}catch(error){console.1og('出错了,错误详情是')console. log(error)object = {'name' :'null' }}console. log(object)
JSON.stringify
是JSON.parse的逆运算
JS数据=> JSON字符串
由于JS的数据类型比JSON多,所以不一定能成功
如果失败,就抛出一个Error对象
步骤
- 创建HttpRequest对象(全称是XMLHttpRequest)
 - 调用对象的open方法
 - 监听对象的onreadystatechange事件
 - -在事件处理函数里使用JSON.parse
 - 调用对象的send方法(发送请求)
 - -具体代码请打开MDN用CRM大法搞定
 
const request = new XMLHttpRequest()request.open("GET", "/5.json")request.onreadystatechange = () => {if (request.readyState === 4) {console.log("下载完成")// 成功的状态码在200-300以内 失败的状态码在300以上if (request.status >= 200 && request.status < 300) {console.log(request.response)const obj = JSON.parse(request.response)myName.textContent = obj.name.toLocaleUpperCase()} else {alert("加载JSON失败")}}}request.send()
错误事件解决
onreadystatechange

