Ajax2

一、Axios使用方法

1.get(和在jQuery中的方法类似)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/axios.min.js"></script>
</head>

<body>
    <input type="button" value="发送get请求" id="btn1">
    <div id="div1"></div>
    <script>
        document.querySelector("#btn1").onclick = function() {
                axios.get("data/student.json")
                    .then(function(res) {
                        //res.data:服务器端返回的数据
                        //console.log(res.data)
                        jsonData(res.data)
                    })
            }
            //处理数据
        function jsonData(data) {
            var table = "<table border='1' bordercolor='red'><tr><th>学号</th><th>姓名</th><th>年龄</th></tr>";
            for (var i = 0; i < data.length; i++) {
                table += "<tr><td>" + data[i].stuID + "</td><td>" + data[i].stuName + "</td><td>" + data[i].stuAge + "</td></tr>"
            }
            table += "</table>"
            document.querySelector("#div1").innerHTML = table
        }
    </script>
</body>

</html>

效果:

 2.使用post(简单表单验证)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/axios.min.js"></script>
    <style>
        .gcolor {
            color: green;
        }
        
        .rcolor {
            color: red;
        }
    </style>
</head>

<body>
    用户名:<input type="text" id="uname">
    <hr />
    <input type="button" value="发送get请求" id="btn1">
    <div id="div1"></div>
    <script>
        document.querySelector("#btn1").onclick = function() {
            var uname = document.querySelector("#uname").value
            var obj = {
                username: uname,
            }
            axios.post("http://127.0.0.1:8089", JSON.stringify(obj))
                .then(function(res) {
                    //res.data:服务器端返回的数据
                    if (res.data.status == 1) {
                        document.querySelector("#div1").classList.remove("rcolor")
                        document.querySelector("#div1").classList.add("gcolor")
                        document.querySelector("#div1").innerHTML = "用户名可用"
                    } else {

                        document.querySelector("#div1").classList.remove("gcolor")
                        document.querySelector("#div1").classList.add("rcolor")
                        document.querySelector("#div1").innerHTML = "用户名已存在"
                    }
                })
        }
    </script>
</body>

</html>

服务器代码:

var http = require("http");
let queryString = require('querystring');
const server = http.createServer(function(req, res) {
    //实现跨域
    res.writeHead(200, { "Access-Control-Allow-Origin": "*" });

    //定义变量保存传递过来的参数
    let params = "";
    //注意:在nodejs中post请求的参数我们不能一次性拿到,必须分批获取
    //为req绑定data事件并添加回调函数
    req.on("data", function(chunk) {
        params += chunk.toString();
    });
    //绑定一个结束事件
    req.on("end", function() {
        var names = ["admin", "张三", "李四", "Tom", "Lucy"]
        var obj = JSON.parse(params)
        if (names.indexOf(obj.username) > -1) {
            result = { "message": "用户名已存在", status: 0 }
        } else {
            result = { "message": "此用户名可用", status: 1 }
        }
        res.end(JSON.stringify(result));
    });
}).listen(8089);
//鼠标右键   运行方式-->Node Application 先运行服务器
//再运行html页面

效果:

二、封装一个自己的Ajax

 自己封装也是要按照那4步骤写只不过就是把他们封装到一个函数里面

js代码:

function myAjax(obj) {
    var xmlHttp; //保存xmlHttpRequest对象
    var type = obj.requestType; //保存请求方式
    var cache = obj.cache || false; //get时是否使用缓存,默认否
    var success = obj.success; //数据请求成功的回调方法
    var error = obj.error; //发生错误的回调方法
    var async = obj.async || false; //是否异步,默认否
    var data = []; //存储用户发来的数据
    var url = obj.url;

    createXMLHttpRequest() //调用
        //定义状态监听函数
    xmlHttp.onreadystatechange = function() {
            switch (xmlHttp.readyState) {
                case 1:
                    console.log("open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。");
                    break;
                case 2:
                    console.log("Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。");
                    break;
                case 3:
                    console.log("所有响应头部都已经接收到。响应体开始接收但未完成。");
                    break;
                case 4:
                    if (xmlHttp.status == 200) {
                        console.log("HTTP 响应已经完全接收。");
                        success(xmlHttp.responseText); //调用回调函数
                    }
                    break;
                default:
                    error(xmlHttp.statusText);
                    break;
            }
        }
        //把用户传来的数据转换成字符串
    for (var i in obj.data) {
        data.push(i + '=' + obj.data[i]);
    }
    data = data.join('&');

    if (type.toUpperCase() == 'GET') { //如果是get请求
        if (cache == false) { //如果get请求不使用缓存
            xmlHttp.open('get', url + '?' + data + '&random=' + Math.random(), async)
            xmlHttp.send('null')
        } else { //如果get请求使用缓存
            xmlHttp.open('get', url + '?' + data, async)
            xmlHttp.send('null')
        }
    } else if (type.toUpperCase() == 'POST') //如果是post请求
    {
        xmlHttp.open('post', url, async)
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        xmlHttp.send(data)
    } else {
        throw new Error('您的请求方法有误!')
    }
    //创建XMLHttpRequest对象
    function createXMLHttpRequest() {
        if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
        } else {
            try {
                xmlHttp = new XMLHttpRequest()
            } catch (error) {
                xmlHttp = false
            }
        }
    }
}

使用的时候和引入js文件一样使用<script>标签引用

 <script src="js/myAjax.js"></script>

三、跨域请求

简介:浏览器均默认开启了同源策略,它指Ajax请求所在的页面和被请求的页面在域名、端口均相同才能被访问,否则会提示如下错误

1.JSONP解决方案和CROS解决方案

JSONP解决方案(JSONP 不是真正的AJAX请求,是利用script的src可可以跨域的特性,动态加载一段script脚本,脚本中包含需要的信息)

 $.getJSON("https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?")

2.CROS解决方案(在服务器端设置)

 //解决跨域
    res.writeHead(200, { "Access-Control-Allow-Origin": "*" });

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值