• ajax基础知识


    1.   什么是Ajax ?

    a)   无刷新的从服务器上读取数据;意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新;

    2.   关于浏览器缓存:

    a)   缓存机制:根据地址来缓存,同样地址只读一次;可以通过Math.random()或new Date().getTime()解决。

    b)   解决缓存困扰:在文件名后加上一个时间戳参数;保存每次读取文件的路径都不一样,这样浏览器就不会去缓存中拿而去读新的;

    3.   Ajax请求动态数据:

    a)   请求JSON文件;

    b)   Ajax 从服务器上所读取的所有东西都是以文本的形式存在的;

    c)   eval的使用,将返回的string转换成arr,或json;

    d)   配合DOM使用;

    4.   eval(str):

    a)   接受一个字符串作为参数(服务器读取的数据都是string类型),这个字符串里面可以放任何JS代码;

    b)   eval可以计算字符串里的值;对于json要加();

    <script>
                window.onload=function(){
                    var oBtn=document.getElementById("btn");
                    oBtn.onclick=function(){   //无刷新的从服务器中取数据
                        ajax('b.txt?t='+Math.random(),function(str){    //Math.random()解决缓存,success成功之后的回调函数
                            var json=eval('('+str+')');    //str--json
                            console.log(json.a); 
                        },function(){                             //error失败之后的回调函数
                            alert('失败了');
                        });
                    };
                }
            </script>

    5.   Ajax的原理:

    a)   HTTP 请求:

            i.      GET方式:安全性低、容量小,有缓存,适于分享,适合获取数据;(如: 浏览帖子)

           ii.      POST方法:安全性稍好,容量2G,无缓存,适合上传数据;(如:用户注册)

    6.   Ajax请求服务器数据的4个步骤:

    a)   创建一个Ajax对象 (买个手机);

            i.      非IE6 : new XMLHttpRequest();

           ii.      IE6 : new ActiveXObject("Microsoft XMLHTTP");

    b)   连接服务器(拨号);

    c)   发送请求,告诉服务器要什么(说话);

    d)   接收返回值(听);

    7.   Ajax对象创建的兼容处理:

    a)   用if (window.XMLHttpRequest) 取代if (XMLHttpRequest)  

    b)   原理:

            i.      用一个不存在的变量: 出错;

           ii.      用一个不存在的属性:undefined;

    8.   Ajax连接服务器:

    a)   oAjax.open(方法,url, 是否为异步);

    b)   方法:大多用”Get”;

    c)   同步与异步:

            i.      同步:任何两件事不能一块儿做;

           ii.      异步: 多件事儿可以一起进行;Ajax天生就该工作在异步模式下的;

    9.   Ajax发送请求:

    a)   oAjax.send();

    10.Ajax接收服务器的返回信息:

    a)   oAjax.onreadystatechange 事件:

            i.      它类似于window.onload;

           ii.      用来监控请求状态;

         iii.      是当客户端和服务器那边有通信发生或有状态变化的时候会来调用;

           iv.      客户端和服务器的通信不是一步就完成的;

            v.      oAjax.readyState属性:告诉我们客户端和服务器的通信发生到哪一步了; 4 代表完成;

           vi.      oAjax.readyState == 4 只代表完成,不代表成功;

         vii.      oAjax.status == 200 代表成功;

        viii.      oAjax.status  , 400多是客户端错误, 500多是服务器错误, 300多是重定向;

           ix.      oAjax.responseText , 就是取得服务器返回的内容;

    11.完整的ajax.js:

    function json2str(json){    //将json转str
        json.t=Math.random();
        var arr=[];
        for(var name in json){
            arr.push(name+'='+encodeURIComponent(json[name]));  //encodeURIComponent兼容汉字,可把字符串作为URI组件进行编码。
        }
        return arr.join('&');
    }
    
    function ajax(url,data,success,error){    //data是url?后面的东西
        //success成功之后的回调函数
        //1.创建一个ajax对象
        if(window.XMLHttpRequest){//可以用undefined作为判断条件,但不能用error作为判断条件;变量不定义,加window相当于undefinded;
            var oAjax = new XMLHttpRequest();   //用于非ie6
        }else{
            var oAjax = new ActiveXObject('Microsoft.XMLHttp');//用于ie6;Microsoft公司的插件
        }
        //2.建立连接  是否异步
        oAjax.open('GET',url+'?'+json2str(data),true);
        //3.发送
        oAjax.send();
        //4.接收
        oAjax.onreadystatechange = function(){
                 //网络状态readyState
            if(oAjax.readyState == 4){   //接收完成   0,初始化1,建立连接2.发送3.接收4.完成
                //http的状态status
                if(oAjax.status>=200&&oAjax.status<300||oAjax.status == 304){   //接收成功  200-300接收成功 304未修改 404未找到
                    //从服务器返回的文本
                    success&&success(oAjax.responseText);    //如果成功,服务器返回的文本内容    
                }else{
                    error&&error(oAjax.status);//如果错误,服务器返回的错误码
                }
            }
        };
        
    }    

     12.ajax的特点:

    a.缓存    Math.random,new Date().getTime();
    b.返回的内容都是string类型
            eval json必须加括号
    c.编码格式要统一
            utf-8
            gb2312
    d.ajax请求数据 与文件后缀名无关

  • 相关阅读:
    LIST组件使用总结
    openlayers之interaction(地图交互功能)
    vbind:class绑定样式,决定样式的显示与否
    cesium之measure功能实现
    Cesium渲染效果差,锯齿明显,解决办法
    CSS让DIV层叠 两个DIV或多个DIV顺序重叠加
    ES6之import/export命令
    vantui:
    Openlayers简单要素的添加
    Vue中的this表示?
  • 原文地址:https://www.cnblogs.com/yang0902/p/5719964.html
Copyright © 2020-2023  润新知