背景

AJAX(Async JavaScript And XML),是浏览器上的功能

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

准备一个server.js服务器,添加index.html/main.js两个路由

加载css

  • 创建HttpRequest对象(全称是XMLHttpRequest)
  • 调用对象的open方法
  • 监听对象的onload&onerror事件
  • ——专业前端会改用onreadystatechange事件
  • ——在事件处理函数里操作CSS文件内容
  • 调用对象的send方法(发送请求)
  • ——具体代码如下
    1. getCSS.onclick = ()=>{
    2. const request = new XMLHttpRequest()
    3. request.open("GET","/style.css")
    4. request.onreadystatechange = ()=>{
    5. if(request.readyState === 4)
    6. {
    7. if(request.status >= 200 && request.status<300)
    8. {
    9. const style = document.createElement("style")
    10. style.innerHTML = request.response
    11. document.head.appendChild(style)
    12. }else{
    13. alert("加载失败")
    14. }
    15. }
    16. }
    17. request.send()
    18. }

    加载JS

    1. getJS.onclick = () => {
    2. const request = new XMLHttpRequest();
    3. request.open("GET", "/2.js");
    4. request.onreadystatechange = () => {
    5. if (request.readyState === 4 && request.status === 200) {
    6. const script = document.createElement("script");
    7. script.innerHTML = request.response;
    8. document.body.appendChild(script);
    9. }
    10. };
    11. request.send();
    12. };

    加载HTML

    1. getHTML.onclick = () => {
    2. const request = new XMLHttpRequest();
    3. request.open("GET", "3.html");
    4. request.onreadystatechange = () => {
    5. if (request.readyState === 4 && request.status === 200) {
    6. const div = document.createElement("div");
    7. div.innerHTML = request.response;
    8. document.body.appendChild(div);
    9. }
    10. };
    11. request.send();
    12. };

    加载XML

    1. getXML.onclick = () => {
    2. const request = new XMLHttpRequest();
    3. request.open("GET", "/4.xml");
    4. request.onreadystatechange = () => {
    5. if (request.readyState === 4 && request.status === 200) {
    6. const dom = request.responseXML;
    7. const text = dom.getElementsByTagName("warning")[0].textContent;
    8. console.log(text.trim());
    9. }
    10. };
    11. request.send();
    12. };

    加载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对象。
    1. getJSON.onclick=()=>{
    2. const request = new XMLHttpRequest()
    3. request.open("GET","/5.json")
    4. request.onreadystatechange = () => {
    5. if(request.reasyState === 4 && request.status ===200){
    6. const object = JSON.parse(request.reponse)
    7. myName.textContent = object.name
    8. }
    9. }
    10. request.send()
    11. }

    加载分页

    1. let n=1
    2. getPage.onclick = ()=>{
    3. const request = new XMLHttpRequest()
    4. request.open("GET",`/page${n+1}`)
    5. request.onreadystatechange = ()=>{
    6. if(request.reasyState === 4 && request.status === 200){
    7. const array = JSON.parse(request.response)
    8. array.forEach(item=>{
    9. const li = document.createElement("li")
    10. li.textContent = item.id
    11. xxx.appendChild(li)
    12. })
    13. n += 1
    14. }
    15. }
    16. request.send()
    17. }