背景
AJAX(Async JavaScript And XML),是浏览器上的功能
- 浏览器可以发请求,收响应
- 浏览器在window上加了一个XMLHttpRequest函数
- 用这个构造函数(类)可以构造出一个对象
- JS通过它实现发请求,收响应
准备一个server.js服务器,添加index.html/main.js两个路由
加载css
- 创建HttpRequest对象(全称是XMLHttpRequest)
- 调用对象的open方法
- 监听对象的onload&onerror事件
- ——专业前端会改用onreadystatechange事件
- ——在事件处理函数里操作CSS文件内容
- 调用对象的send方法(发送请求)
- ——具体代码如下
getCSS.onclick = ()=>{const request = new XMLHttpRequest()request.open("GET","/style.css")request.onreadystatechange = ()=>{if(request.readyState === 4){if(request.status >= 200 && request.status<300){const style = document.createElement("style")style.innerHTML = request.responsedocument.head.appendChild(style)}else{alert("加载失败")}}}request.send()}
加载JS
getJS.onclick = () => {const request = new XMLHttpRequest();request.open("GET", "/2.js");request.onreadystatechange = () => {if (request.readyState === 4 && request.status === 200) {const script = document.createElement("script");script.innerHTML = request.response;document.body.appendChild(script);}};request.send();};
加载HTML
getHTML.onclick = () => {const request = new XMLHttpRequest();request.open("GET", "3.html");request.onreadystatechange = () => {if (request.readyState === 4 && request.status === 200) {const div = document.createElement("div");div.innerHTML = request.response;document.body.appendChild(div);}};request.send();};
加载XML
getXML.onclick = () => {const request = new XMLHttpRequest();request.open("GET", "/4.xml");request.onreadystatechange = () => {if (request.readyState === 4 && request.status === 200) {const dom = request.responseXML;const text = dom.getElementsByTagName("warning")[0].textContent;console.log(text.trim());}};request.send();};
加载JSON
JSON(JavaScript Object Notation)是一门语言独立的标记语言,跟HTML、XML、MARKDOWN一样是用来展示数据的。JSON官方网站解释的很清楚。
JSON.parse(xxx)可以把符合JSON语法的字符串JS对应类型的数据。由于JSON只有6种数据类型,如果不符合JSON语法,则会抛出一个Error对象,一般用try catch 捕获错误
JSON.stringfy()是JSON.parse()的逆运算,由于JS比JSON数据类型多,所以不一定会成功,如果失败,就抛出一个error对象。getJSON.onclick=()=>{const request = new XMLHttpRequest()request.open("GET","/5.json")request.onreadystatechange = () => {if(request.reasyState === 4 && request.status ===200){const object = JSON.parse(request.reponse)myName.textContent = object.name}}request.send()}
加载分页
let n=1getPage.onclick = ()=>{const request = new XMLHttpRequest()request.open("GET",`/page${n+1}`)request.onreadystatechange = ()=>{if(request.reasyState === 4 && request.status === 200){const array = JSON.parse(request.response)array.forEach(item=>{const li = document.createElement("li")li.textContent = item.idxxx.appendChild(li)})n += 1}}request.send()}
