zoukankan      html  css  js  c++  java
  • JavaScript基础知识——ajax与存储

    QA:

      1、手写Ajax

      以下已经兼容IE

    function Ajax(type, url, data, success, failed){
        // 创建ajax对象
        var xhr = null;
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject('Microsoft.XMLHTTP')
        }
     
        var type = type.toUpperCase();
        // 用于清除缓存
        var random = Math.random();
     
        if(typeof data == 'object'){
            var str = '';
            for(var key in data){
                str += key+'='+data[key]+'&';
            }
            data = str.replace(/&$/, '');
        }
     
        if(type == 'GET'){
            if(data){
                xhr.open('GET', url + '?' + data, true);
            } else {
                xhr.open('GET', url + '?t=' + random, true);
            }
            xhr.send();
     
        } else if(type == 'POST'){
            xhr.open('POST', url, true);
            // 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send(data);
        }
     
        // 处理返回数据
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4){//状态变化
                if(xhr.status == 200){//服务端返回的状态码
                    success(xhr.responseText);
                } else {
                    if(failed){
                        failed(xhr.status);
                    }
                }
            }
        }
    }
     
    // 测试调用
    var sendData = {name:'asher',sex:'male'};
    Ajax('get', 'data/data.html', sendData, function(data){
        console.log(data);
    }, function(error){
        console.log(error);
    });
    readyState每次的变化,都会出发onreadystatechange 函数的执行
      0、未初始化,还没有调用send()方法
      1、载入,已经调用send(),正在发送请求
      2、载入完成,send()执行完成,并且已经接受相应内容
      3、正在解析响应
      4、响应解析完成,客户端调用
    status 状态码
      200-请求成功
      3XX-重定向,浏览器直接跳转
      4XX-客户端请求错误(404找不到,401没有权限)
      5XX-服务器错误

      2、跨域实现方式

        跨域:浏览器同源策略,不允许ajax访问其他接口

        跨域条件:协议,域名,端口,有一个不同,就算跨域

        可以跨域的标签:     

    < img src =xxx >
    < link href = xxx>
    < script src = xxx>

        实现方式:JSONP、服务端设置http header

      3、请描述一下 cookie, sessionStorage 和 localStorage 的区别?

    • cookie
      本身是用于客户端和服务端通信,但是它有本地存储的功能,于是就被借用;
      使用document.cookie = ... 获取和修改即可

    • cookie 用于存储的缺点
      -- 储存容量太小, 只有 4KB
      -- 所有 http 请求都会带着cookie,会影响获取资源的效率
      -- API 简单,需要封装才能用 document.cookie = ...


    • sessionStorage 和 localStorage
      -- HTML5专门为存储设计,最大容量为 5M
      -- API 简单易用
      -- localStorage.setItem(key, value);localStorage.getItem(key)
      -- sesionStorage和tocalStorage的区别,都可以用于本地存储,但是sesionStorage关掉浏览器后缓存会被自动清理,localStorage不会
  • 相关阅读:
    《如何评价Kaiming He的Momentum Contrast for Unsupervised?》
    多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!
    GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!
    上Github,北大、清华、浙大、中科大4大名校课程在线学,加星总数超1.8万
    使用Python+OpenCV进行图像处理(二)| 视觉入门
    重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!
    巴黎不哭!十亿数据精准扫描,帮卡西莫多重新找回他的玫瑰花窗
    机器学习算法系列:FM分解机
    百道Python面试题实现,搞定Python编程就靠它
    学习GAN必须阅读的10篇论文
  • 原文地址:https://www.cnblogs.com/utrustme/p/8573885.html
Copyright © 2011-2022 走看看