• 原生JS模拟JQuery封装Ajax


    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>原生JS模拟JQuery封装Ajax</title>
    <script src="./mock-min.js"></script>
    </head>
    
    <body>
    <button id="btn">异步发送请求</button>
    <p id="oP"></p>
    <script>
    btn.onclick = function(){
    ajax(data);
    }
    // data作为参数传入我们下面封装的函数
    let data = {
    type: 'get',
    //数据
    data: {
    user: "xiejie",
    pass: '123456',
    age: 18,
    },
    //回调函数
    success: function (data) {
    console.log(data);
    document.getElementById('oP').innerHTML = data;
    },
    error:function(err){
    console.log(err);
    },
    // 异步发送请求
    async: true,
    // 发送请求的url
    url: 'getStudent'
    }
    // 辅助函数,把传进来的对象拼接成url的字符串
    function toData(obj) {
    if (obj === null) {
    return obj;
    }
    let arr = [];
    for (let i in obj) {
    let str = i + "=" + obj[i];
    arr.push(str);
    }
    return arr.join("&");
    }
    // 封装Ajax
    function ajax(obj) {
    //指定提交方式的默认值
    obj.type = obj.type || "get";
    //设置是否异步,默认为true(异步)
    obj.async = obj.async || true;
    //设置数据的默认值
    obj.data = obj.data || null;
    // 根据不同的浏览器创建XHR对象
    let xhr = null;
    if (window.XMLHttpRequest) {
    // 非IE浏览器
    xhr = new XMLHttpRequest();
    } else {
    // IE浏览器
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // 区分get和post,发送HTTP请求
    if (obj.type === "post") {
    xhr.open(obj.type, obj.url, obj.async);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    let data = toData(obj.data);
    xhr.send(data);
    } else {
    //get test.php?xx=xx&aa=xx
    let url = obj.url + "?" + toData(obj.data);
    xhr.open(obj.type, url, obj.async);
    xhr.send();
    }
    // 接收返回过来的数据
    xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
    if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
    if (obj.success) {
    obj.success(xhr.responseText);
    }
    } else {
    if (obj.error) {
    obj.error(xhr.status);
    }
    }
    }
    }
    }
    // 接下来我们使用Mock来截取Ajax请求
    Mock.mock(/getStudent/, 'get', function () {
    return data.data;
    });
    </script>
    </body>
    
    </html>
  • 相关阅读:
    [PHP] Laravel中env函数返回null原因
    [PHP] laravel8 发送通知邮件
    [PHP] hyperf代码热更新-hyperf-watch
    [日常]wps插入页眉页脚
    [linux] du查找数据大的目录
    [PHP] new static()和new self()的区别
    [docker] docker删除容器
    [docker] docker删除镜像
    [javascript] js删除数组中的元素
    [PHP] hyperf框架代码热更新
  • 原文地址:https://www.cnblogs.com/lyl-0667/p/11286751.html
Copyright © 2020-2023  润新知