• JS框架设计读书笔记之-异步


    setTimeout/setInterval

      1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些。

      2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为15.6ms,后来精确到10ms,IE10为4ms,其他浏览器大概也是4ms。

      3. 回调时间取0时,该函数会在能立即执行的时段触发。

      4. 不写第二个参数,浏览器会自动配时间。

      5. IE10与标准浏览器都支持额外参数,从第三个参数起,作为回调函数的参数传入。

        setTimeout(function(a, b) {
            console.log(a + b);
        }, 0, 1, 2);    //3

      6. setTimeout方法的时间参数若为极端值,浏览器处理会出现极大差异,某些浏览器会立即执行。(chrome填-9999立即执行了)

    Ajax

       

      Ajax核心就是XMLHttpRequest,IE5的时候,微软用ActiveXObject对象来加载数据,这个对象还能做很多其他事情,根据传入的参数来创建一个HTML页面什么的,在IE7的时候,隔离出XMLHttpRequest对象,但是这个对象不支持本地file协议,会出现拒绝访问。

    发送请求 open(method,url,async,username,password)

      method:用于定义请求http的方法,值包括get、post、put、delete等,有的浏览器还允许自定义方法,不过要求全是大写。

      url:参数是请求的主体,一般浏览器都有同源安全策略,跨服请求将被拒绝。get请求时,参数会以querystring的形式放在问号后面。

      async:是否异步,默认为true。如果为false,后续调用将被阻塞。

      username/password:可选参数,没用过。

    接收数据

      早期有两种接收数据的属性。responseText对应解码后的字符串,默认为uft-8,responseXML对应一个XML文档。JSON格式兴起后,一般会调用JSON.parse(data)得到JSON数据。一般都是看后台给的文档,如果不给,只能通过getResponseHeader('Content-Type')查看。

      创建一个异步请求主要分为下面几个步骤:

        //创建异步对象
        var xhr = new XMLHttpRequest();
        //调用open方法准备开始连接
        //get方法
        xhr.open('get/post', 'url');
        //如果是post请求
        if ('post') {
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        }
        //发送请求
        //get请求传入null
        xhr.send('data');
        //监听服务器返回的数据
        xhr.onreadystatechange = function() {
            if (xhr.status == 200 && xhr.readyState == 4) {
                //返回数据为xhr.responseText
            }
        }

      可以进行封装,并传入一个对象参数:

        //接受url、method、fn、data四个参数
        //其中data以对象形式传入
        function ajax(obj) {
            var url = obj.url;
            var method = obj.method.toLowerCase();
            var fn = obj.fn;
            var Data = parseData(obj.data);
            var xhr = new XMLHttpRequest();
            if (method == 'get') {
                url = url + "?" + Data;
                Data = null;
            }
            xhr.open(method, url);
            if (method == 'post') {
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
            }
            xhr.send(Data);
            xhr.onreadystatechange = function() {
                if (xhr.status == 200 && xhr.readyState == 4) {
                    var result = xhr.responseText;
                    fn(result);
                }
            }
        }
        //{a:1,b:2} => a=1&b=2
        function parseData(obj) {
            var finalData = "";
            for (key in obj) {
                finalData += key + "=" + obj[key] + "&";
            }
            return finalData.slice(0, -1);
        }
    老子要日穿V8引擎
  • 相关阅读:
    【luogu P1073 最优贸易】 题解
    【luogu P2919 [USACO08NOV]守护农场Guarding the Farm】 题解
    【luogu P3946 ことりのおやつ】 题解
    【luogu P3393 逃离僵尸岛】 题解
    ubuntu问题: 同时只能有一个软件管理工具在运行
    Windows server 2008 r2 开启Aero
    windows8.1安装之后的感想
    20条Linux命令面试问答
    9个常用iptables配置实例
    Linux SSH安全技巧
  • 原文地址:https://www.cnblogs.com/QH-Jimmy/p/6442708.html
Copyright © 2020-2023  润新知