zoukankan      html  css  js  c++  java
  • AJAX四条语句的详细分析(精华版)

    AJAX四条语句的详细分析

    ajax只有四条语句,很简单,这话没错,如果是一个没有学习过的人,还真觉得就是那么回事。但是认真分析过后,就会发现这里面的东西越来越多。

    ajax简单的四句

    var xhr=new XMLHttpRequest();  //new ajax对象
    xhr.addEventListener("load",loadHandler); //实例侦听事件   
    xhr.open("POST","http://localhost:4006");   //发送方式    地址
    xhr.send('{"user":"morty","age":18}');      //发送的数据    
    //GET发送方式,就不多说了
    

    ajax 具体分析

    1. var xhr=new XMLHttpRequest(); 主要是兼容写法
    var xhr
    try{
        xhr=new XMLHttpRequest();
    }catch(error){
        xhr=new ActiveXObject("Microsoft.XMLHTTP"); //IE7
    }
    
    1. xhr.open("POST","http://localhost:4006"); // 5个参数 发送方式 地址 async(同步异步) user password
     默认是true,异步。如果设置false,是同步,向服务器发送请求后开始等待,知道服务器返回消息后,才开始执行下面的代码,所以我们一般不会设置为同步
     user  password  访问地址的用户名密码
    

    3.xhr.send() //6种数据类型: 不发送 ArrayBuffer(二进制数据流) Blob(二进制大对象) Document(文档对象) DOMString(文本数据) FormData(表单数据)

    Blob类型的发送

    js代码

    var file = document.querySelector('input');
    var bn = document.querySelector("button");
    bn.addEventListener("click", clickHandler)
    
    function clickHandler(e) {
        sendFiles(file.files); //file.files是选中的文件  file的类型是Blob,可以直接发送给服务器
    }
    
    async function sendFiles(list) {
    
        for (var i = 0; i < list.length; i++) {
            await sendFile(list[i]).then(function (res) {
                console.log(res);
            })
        }
    }
    
    function sendFile(file) {
        return new Promise(function (resolve, reject) {
            var xhr = new XMLHttpRequest();
            xhr.onload = function () {
                resolve(xhr.response)
            }
            xhr.open("POST", "http://localhost:4006");
            xhr.send(file);
        })
    };
    

    html页面

    <input type="file" multiple>
    <button>发送</button>
    

    FormData表单的发送

    js代码

    var form = document.querySelector("form");
    form.addEventListener("submit", submitHandler);
    
    function submitHandler(e) {
        e.preventDefault();  //阻止表单的默认提交,让其通过ajax来发送
        var xhr = new XMLHttpRequest();
        xhr.addEventListener("load", loadHandler);
        xhr.open("POST", "http://localhost:4006");
        xhr.send(new FormData(form));  //直接把表单全部放到FormData中,会把整个表单内容发送出去
    }
    
    function loadHandler(e) {
    
    }
    

    html页面

    <form>
            <input type="text" name="user">
            <input type="text" name="password">
            <button type="submit">提交</button>
        </form>
    

    4.xhr.addEventListener("load",loadHandler); ajax的侦听事件

    1)timeout 超时事件   超时重发,也就是断线重连(3次) 超过3次,终止加载    
    
    var time = 0;
    function ajax() {
        var xhr = new XMLHttpRequest();
        xhr.addEventListener("load", loadHandler);
        xhr.addEventListener("timeout", timeoutHandler);
        xhr.open("GET", "http://localhost:4006?user=xietian&age=30");
        xhr.timeout = 2000;   //要注意设置超时的位置  在open之后,send之前
        xhr.send();
    }
    
    function loadHandler(e) {
    
    }
    
    function timeoutHandler(e) {
        if (time < 3) ajax();
        else this.abort();//中止加载
    }
    2)abort()   当一个资源的加载已中止时,将触发 abort事件  例如:上面的三次重连后,终止加载,触发abort方法,来停止加载
    3)loadstart 开始加载事件         当程序开始加载时,loadstart 事件将被触发
    4)Progress  进度事件            会被触发用来指示一个操作正在进行中   Progress属性:loaded  当前加载字节      total  总字节
    5)loadend   加载进度停止事件     当一个资源加载进度停止时,触发loadend事件
    6)load      加载完成事件         当一个资源及其依赖资源已完成加载时,将触发load事件
    7)error     加载错误事件         当一个资源加载失败时会触发error事件
    8)readystatechange   加载事件    当一个文档的 readyState 属性发生更改时
    readyState:0 代理开始  1  2  3  4   下载结束     数据每次改变,都会触发此事件,直接下载结束
    status:响应消息的状态
    信息  100-101
    成功  200-206
    重定向  300-307
    客户端错误 400-417
    服务器错误  500-505
    

    关于侦听事件的理解:load事件是所有的下载结束后,触发,但是想要侦听过程,还要其他事件来配合使用,所以我们经常用readystatechange来侦听事件

    var xhr = new XMLHttpRequest();
    xhr.addEventListener("readystatechange", readyHandler);
    xhr.open("GET", "http://localhost:4006?user=xietian&age=30");
    xhr.send();
    
    function readyHandler(e) {
        if (xhr.readyState === 4 && xhr.status === 200) {   //通过这个判断可以侦听到访问的过程
            console.log(xhr.response);
        }
    }
    
  • 相关阅读:
    常用的正则表达式,字符串,地址操作
    倒计时工具
    Java—集合框架List
    Java—包装类、Date和SimpleDateFormat、Calendar类
    Java—字符串
    Java —异常
    Java—多态
    Java—继承
    Java—封装
    Java —类和对象
  • 原文地址:https://www.cnblogs.com/94-Lucky/p/13455381.html
Copyright © 2011-2022 走看看