Ajax(一)

ajax的概念:用来做数据交互使用的

ajax的原理:通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后通过

JavaScript操作数据,从而达到更新页面的效果

简答来说:用于在后台与服务器交换数据,达到局部刷新的效果

ajax的核心:XmlHttpRequest对象

ajax的特点:异步加载,局部刷新
    - 同步:一次一个,前一个没执行完,后一个也不能开始
    - 异步:一次一堆,前一个没执行完,后一个也能开始

ajax的好处:
    1.最大的点就是页面无刷新,在页面与服务器通信时,用户体验会非常好,节约带宽、节约资源
    2.在使用异步请求时,具有更加迅速的响应能力,不需要打断用户操作

注意:涉及到ajax的访问,千万不能使用文件协议的方式打开2

  1. 创建XmlHttpRequest对象 ---> 相当于创建了一个http请求的对象,主要用于和服务器交换数据
    var xhr = new XMLHttpRequest();
  2. open(规定请求的类型get/post, URL, 是否异步请求(默认是异步)) ---> 相当于与服务器建立了一个特定的端口的链接

    xhr.open('get', './test.txt');    //get类型 文件路径为./test.txt
  3. 将请求发送到服务器开始请求

     // send(string --> 只能用在post方式请求的时候)
    xhr.send();

  4. 等待响应,需要使用事件机制去通知他,这个事件只要状态发生了改变就会触发

            xhr.onreadystatechange = function() {
                // console.log(111);// 触发了三次
                console.log(this.readyState);// 状态的数值:2/3/4
    
                // 判断响应已经就绪时,就可以拿到我们想要的数据了
                if(this.readyState != 4) return;// 当函数体只有一行时,可以省略大括号
    
                console.log(this.responseText);// 拿到响应的文本
                document.getElementsByTagName('body')[0].innerHTML = this.responseText;
            }

    readyState的四种状态

 readyState的状态变化

        var xhr = new XMLHttpRequest();
        console.log(xhr.readyState);// 0:请求未初始化(还没有调用send()方法)

        xhr.open("get", "./01.ajax的基本概念.html");
        console.log(xhr.readyState);// 1:服务器连接已经建立(已调用send()方法,正在发送请求)

        xhr.send();
        // console.log(xhr.readyState);   //也是1

        xhr.addEventListener("readystatechange", function() {
            console.log(xhr.readyState);// 2, 3, 4
            switch(xhr.readyState) {
                case 2:// 请求已接收
                    // 获取响应头
                    console.log(this.getAllResponseHeaders());// 所有响应头
                    console.log(this.getResponseHeader("date"));// 其中一个
                    // 获取响应的文本内容
                    console.log(this.responseText);// 没有
                    break;
                case 3:// 请求处理中
                    // 获取响应的文本内容
                    console.log(this.responseText);
                    // 但是有可能不完整,不保险
                    break;
                case 4:// 整个响应的报文已经完整的下载下来了
                    console.log(this.responseText);
            }
        })

控制台network中可以找到请求头,请求方式,请求地址,响应头等内容

        // 怎么遵循http协议:就是要设置请求头和请求体
        var xhr = new XMLHttpRequest();

        xhr.open("post", "./test.txt");

        // 设置请求头:一般都是urlencode格式,都会设置application/x-www-form-urlencoded
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        // 设置请求体
        xhr.send("username=Cherry&password=123456");// 发送要传过去的数据

        xhr.addEventListener("readystatechange", function() {
            if(this.readyState == 4 && this.status == 200) {
                console.log(this.responseText);
            }
        })

用get请求数据

json 就是一种格式 一种数组里储存的对象 每个对象都有自己的属性

 上面就是一种json文件的格式 

JSON.parse() ---> 将json字符串转化为json对象

JSON.stringify() ---> 将json对象转化为json字符串

eval()函数也可以将JSON对象解析为对象,写法不一样  eval("(" + data + ")");

用post发送请求

get:一般用于根据参数获取数据

post:相对更安全,一般用户信息提交,表单提交,无限制大小

一种 用post发送请求到"http://www.liulongbin.top:3005/api/addproduct"端口的例子  (可能现在已经废弃)

<div>
        添加品牌数据:
        <input type="text" id="product">
        <br>
        <button id="btn">确定</button>
    </div>
    <script>
        var inp = document.getElementById("product");
        var btn = document.getElementById("btn");

        btn.onclick = function() {
            var addName = inp.value; 
            var xhr = new XMLHttpRequest();
            xhr.open("post", "http://www.liulongbin.top:3005/api/addproduct");
            // 设置请求头
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send("name=" + addName);
            xhr.addEventListener("readystatechange", function() {
                if(this.readyState != 4) return;
                console.log(this.responseText);
            })
        }

同步和异步

ajax的特点:异步加载,局部刷新
    - 同步:一次一个,前一个没执行完,后一个也不能开始
    - 异步:一次一堆,前一个没执行完,后一个也能开始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WA终结者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值