JavaScript之AJAX

AJAX(Async JavaScript AND XML)

用JS发送请求和接收响应,这就是AJAX的全部内容

AJAX是浏览器上的功能
  1. 浏览器可以发送请求,接收响应
  2. 浏览器在window上加一个XMLHttpRequest函数
  3. 用这个构造函数(类)可以构造出一个对象
  4. JS通过实现它来发送请求,接收响应
AJAX应用的四个步骤
  • 创建XMLHttpRequest对象(全称是XMLHttpRequest)
  • 调用对象的OPEN方法
  • 监听对象的onload&onerror事件,当然用onreadystatechange事件更靠谱
  1. 专业前端会用onreadystatechange
  • 调用对象的send方法(发送请求)

下面代码用ajax代码实现加载css\js\html\XML\json\分页

if(path === '/index.html'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    let string = fs.readFileSync("public/index.html").toString();
    // response.write(`<link rel="stylesheet" href="./style.css"><h1>你好</h1><br/><h2>你是一个小彩笔!</h2>`)
    const page1 = fs.readFileSync("db/page1.json").toString();
    const array = JSON.parse(page1);
    const result = array.map(item=>`<li>${item.id}</li>`).join('');
    string = string.replace('{page1}',`<ul id="xxx">${result}</ul>`);
    response.write(string);
    response.end()
  } else  if(path === '/xml.xml'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/xml;charset=utf-8')
    let string = fs.readFileSync("public/xml.xml");
    // response.write(`<link rel="stylesheet" href="./style.css"><h1>你好</h1><br/><h2>你是一个小彩笔!</h2>`)
    response.write(string);
    response.end()
  }else if(path === '/page2'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/json;charset=utf-8')
    response.write(fs.readFileSync('db/page2.json'))
    response.end()
  } else if(path === '/page3'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/json;charset=utf-8')
    response.write(fs.readFileSync('db/page3.json'))
    response.end()
  }else  if(path === '/test.html'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    let string = fs.readFileSync("public/test.html");
    // response.write(`<link rel="stylesheet" href="./style.css"><h1>你好</h1><br/><h2>你是一个小彩笔!</h2>`)
    response.write(string);
    response.end()
  } else if(path === '/main.js'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/javascript;charset=utf-8');
    let string = fs.readFileSync("public/main.js");
    response.write(string);
    response.end()
  }else if(path === '/test.js'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/javascript;charset=utf-8');
    let string = fs.readFileSync("public/test.js");
    response.write(string);
    response.end()
  }  else if(path === '/style.css'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'text/css;charset=utf-8');
    let string = fs.readFileSync("public/style.css");
    response.write(string);
    response.end()
  }else if(path === '/json.json'){
    response.statusCode = 200
    response.setHeader('Content-Type', 'application/json;charset=utf-8');
    let string = fs.readFileSync("public/json.json");
    response.write(string);
    response.end()
  } else {
    response.statusCode = 404
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write(`你访问的页面不存在!`)
    response.end()
  }
<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>ajax测试示例</title>
    </head>
    <body>
        <h1>ajax测试demo <span id="myName"></span></h1>
        <p>
            <button id="cssBtn">请求CSS</button>
            <button id="jsBtn">请求JS</button>
            <button id="htmlBtn">请求HTML</button>
            <button id="xmlBtn">请求XML</button>
            <button id="jsonBtn">请求JSON</button>
            <button id="pageBtn">请求下一页</button>
        </p>
        <div>
            {{page1}}
        </div>
        <script src="main.js"></script>
    </body>
</html>
let n = 1;
    cssBtn = document.querySelector('#cssBtn'),
    jsBtn = document.querySelector('#jsBtn'),
    xmlBtn = document.querySelector('#xmlBtn'),
    jsonBtn = document.querySelector('#jsonBtn'),
    pageBtn = document.querySelector('#pageBtn'),
    htmlBtn = document.querySelector('#htmlBtn');

pageBtn.onclick = () => {
    let request = new XMLHttpRequest();
    request.open("GET",`/page${n+1}`);
    request.onreadystatechange = ()=>{
        let states = request.readyState,
            stauts = request.status;
        if(states === 4 && stauts === 200){
            const array = JSON.parse(request.response);
            array.forEach(element => {
                const li = document.createElement('li');
                li.textContent = element.id;
                xxx.appendChild(li);
            });
            n +=1;
        }
    }
    request.send();
}

jsonBtn.onclick = () => {
    let request = new XMLHttpRequest();
    request.open("GET","/json.json");
    request.onreadystatechange = ()=>{
        let states = request.readyState,
            stauts = request.status;
        if(states === 4 && stauts === 200){
            let json = request.response,
                obj = JSON.parse(json);
            myName.textContent = obj.name;
        }
    }
    request.send();
}

xmlBtn.onclick = ()=>{
    let request = new XMLHttpRequest();
    request.open("GET","/xml.xml");
    request.onreadystatechange = () => {
        let states = request.readyState,
            status = request.status;
        if(states === 4 && status === 200){
            let dom = request.responseXML;
            //注意我的系统此处是null
            console.log(request.responseXML);
            if(null === dom){
                dom = request.response;
                console.log(dom);
            }else{
                let text = dom.getElementsByTagName('waring')[0].textContent;
                console.log(text);
            }
        }  
    }
    request.send();
}    

htmlBtn.onclick = ()=>{
    let request = new XMLHttpRequest();
    request.open("GET","/test.html");
    request.onreadystatechange = () =>{
        let states = request.readyState,
            status = request.status;
        if(states === 4 && status === 200){
            let div = document.createElement("div");
            div.innerHTML = request.response;
            document.body.appendChild(div);
        }
    }
    request.send();
}
jsBtn.onclick = ()=>{
    let request = new XMLHttpRequest();
    request.open("GET","/test.js");
    request.onreadystatechange = () =>{
        let states = request.readyState,
            status = request.status;
        if(states === 4 && status === 200){
            let script = document.createElement("script");
            script.innerHTML = request.response;
            document.body.appendChild(script);
        }
    }
    request.send();
}
cssBtn.onclick = ()=>{
    let request = new XMLHttpRequest();
    request.open("GET","/style.css");
    request.onreadystatechange = () =>{
        let states = request.readyState,
            status = request.status;
        if(states === 4 && status === 200){
            let style = document.createElement("style");
            style.innerHTML = request.response;
            document.head.appendChild(style);
        }
    }
    request.send();
}
JSON
理解
  1. JSON是一门语言
  2. JSON是一门标记语言,用来展示数据
  3. 与HTML、CSS、XML、JavaScript一样,是一门独立的语言
  4. 请注意,我们应该说JSON中的对象而不是直接说JSON对象
  5. 中文官网
  6. 支持的数据类型
  • string-只支持双引号,不支持单引号和无引号
  • number-支持科学记数法
  • bool-true || false
  • null-没有undefined
  • object
  • array
  • 不支持函数,不支持变量
window.JSON
  1. JSON.parse
  • 将jSON格式的数据转换为JS对应类型的数据
  • JSON字符串 => JS数据
  • JSON6种数据,所以转换也只有6种
  • 不符合JSON语法,抛出Error对象
  • 一般用try/catch捕获错误
  1. JSON.stringify
  • JSON.parse的逆运算
  • JS数据 => JSON字符串
  • 由于JS的数据类型比JSON多,因此不一定能成功
  • 如果失败,抛出Error对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaobangsky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值