Ajax

作者: 致自己_cb38 | 来源:发表于2018-11-18 19:31 被阅读0次

    1、跨域:

    • 域:域名协议端口一致的话就叫做同源。只要有一个不同,那么就是不同源。
    • ajax不能请求不同源上的资源。就会产生跨域问题。
    • 解决方案
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script src="ajax.js"></script>
        <script>
            function log(data){
                console.log(data);
            }
        </script>
        <script src="http://127.0.0.1/ajax3/kuayu.js"></script>
    </body>
    </html>
    

    2、计算机组成原理:

    • 进程:一个应用程序或者一个计算要完成的功能。一个应用有可能是多个进程。
    • 进程调度:异步,CPU一个时间只能做一件事情。
    • 线程:进程细化。时间化成碎片。

    3、Ajax:传输存储数据(页面无刷新技术,JS通过URL加载数据,过程用户不可见)

    Asynchronous Javascript And XML(异步 JavaScript 和 XML)

    • 异步(true):不同步,页面无刷新技术(同时做几件事)。
    • 同步(false):一件事完成再做另一件事(一步一步)。

    4、JSON:轻量级数据交换格式

    JSON对象与字符串相互转化

    • 字符串转化对象
    let obj = JSON.parse(str);
    let obj = eval('('+str+')');
    
    • 对象转化字符串
    let obj = JSON.stringify(str);
    

    5、Ajax步骤:

    • 创建XMLHttpRequest对象
      兼容
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    }else{
        xhr = new ActiveXObjext('microsoft.XMLHTTP');
    }
    
    • open 建立连接
    • 发送信息
    • 接受信息
      eg:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <button>获取</button>
        <script>
            document.querySelector('button').onclick=()=>{
                //创建ajax对象(兼容)
                let xhr;
                if(window.XMLHttpRequest){
                     xhr = new XMLHttpRequest();
                }else{
                      xhr = new ActiveXObjext('microsoft.XMLHTTP');
                }
                //建立连接
                xhr.open('get','./1txt.txt?t='+Math.random(),true);
                //发送数据
                xhr.send(null);
                //检测状态
                xhr.onreadystatechange = ()=>{
                    //检测是否已经准备好
                    if(xhr.readyState==4){
                        //表示响应准备就绪
                        if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
                            //请求成功之后的处理
                            alert(xhr.responseText);
                        }else{
                            //处理ajax返回异常的情形
                        }
                    }else{
                        //ajax请求失败的处理
                    }
                };
            }
        </script>
    </body>
    </html>
    

    6、获取XML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <button>获取</button>
        <script>
            document.querySelector('button').onclick=()=>{
                //创建ajax对象
                let xhr;
                if(window.XMLHttpRequest){
                     xhr = new XMLHttpRequest();
                }else{
                     xhr = new ActiveXObjext('microsoft.XMLHTTP');
                }
                //建立连接
                xhr.open('get','./2xml.xml?t='+Math.random(),true);
                //发送数据
                xhr.send(null);
                //检测状态
                xhr.onreadystatechange = ()=>{
                    //检测是否已经准备好
                    if(xhr.readyState==4){
                        //表示响应准备就绪
                        if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
                            //请求成功之后的处理
                            let re = createXml(xhr.responseText);
                            //console.log(xhr.responseXML);
                        }else{
                            //处理ajax返回异常的情形
                        }
                    }else{
                        //ajax请求失败的处理
                    }
                };
            }
    //将XML字符串转化为对象
           function createXml(str){
              if(document.all){
                  var xmlDom=new ActiveXObject("Microsoft.XMLDOM")
                  xmlDom.loadXML(str);
                  return xmlDom
                }else{
                     return new DOMParser().parseFromString(str, "text/xml");
                }    
            }
        </script>
    </body>
    </html>
    

    7、获取POST

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <form action="javascript:;">
            用户名:<input type="text" name="user"><br><br>
            密 码:<input type="password" name="password"><br><br>
        </form>
        <br><br>
        <button>提交</button>
        <script>
            document.querySelector('button').onclick=()=>{
                //创建ajax对象
                let xhr;
                if(window.XMLHttpRequest){
                     xhr = new XMLHttpRequest();
                }else{
                      xhr = new ActiveXObjext('microsoft.XMLHTTP');
                }
                //建立连接
                xhr.open('POST','4.php',true);
                xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                //发送数据
                let form = document.querySelector('form');
                let data = 'user='+ form.user.value +'&password='+form.password.value ;
                //console.log(data);
                xhr.send(data);
                //检测状态
                xhr.onreadystatechange = ()=>{
                    //检测是否已经准备好
                    if(xhr.readyState==4){
                        //表示响应准备就绪
                        if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
                            //请求成功之后的处理
                            let x = JSON.parse(xhr.responseText);
                            alert(x.message);
                        }else{
                            //处理ajax返回异常的情形
                        }
                    }else{
                        //ajax请求失败的处理
                    }
                };
            }
        </script>
    </body>
    </html>
    

    8、Ajax封装

    function Ajax(type, url, data, success, failed){
        // 创建ajax对象
        let xhr = null;
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject('Microsoft.XMLHTTP')
        }
        type = type.toUpperCase();  //转化为大写
        // 用于清除缓存
        let 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(null);
        } 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&&xhr.status<300)||xhr.status==304){
                    success(xhr.responseText);
                } else {
                    if(failed){
                        failed(xhr.status);
                    }
                }
            }
        }
    }
    

    9、三级联动使用ajax封装

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <form action="javascript:;" id="form">
            省:
            <select name="sheng" id="sheng">
                <option value="-1">请选择省份</option>
            </select>
            市:
            <select name="shi" id="shi">
                <option value="-1">请选择市</option>
            </select>
            区/县:
            <select name="xian" id="xian">
                <option value="-1">请选择区县</option>
            </select>
        </form>
    </body>
    <script src="ajax.js"></script>
    <script>
        let form = document.getElementById('form');
        let sheng,shi;
        Ajax('get','http://localhost/ajax3/city.json',null,success,error)
        function success(jsondata){
            json = JSON.parse(jsondata);
            sheng = json.citylist;
            for(let [index,obj] of json.citylist.entries()){
                let option = document.createElement('option');
                option.innerText = obj.p;
                option.value=index;
                form.sheng.appendChild(option);
            }
        }
        function error(){
    
        }
        form.sheng.onchange=function(){
            // 清除市和县,选择省后再加载
            form.shi.innerHTML = '<option value="-1">请选择市</option>';
            form.xian.innerHTML = '<option value="-1">请选择区县</option>';
            //市的下标(关联区)
            shi = sheng[this.value].c;
            for(let [index,obj] of sheng[this.value].c.entries()){
                let option = document.createElement('option');
                option.innerText = obj.n;
                option.value=index;
                form.shi.appendChild(option);
            }
        };
        form.shi.onchange = function(){
            form.xian.innerHTML = '<option value="-1">请选择区县</option>';
            for(let [index,obj] of shi[this.value].a.entries()){
                let option = document.createElement('option');
                option.innerText = obj.s;
                option.value=index;
                form.xian.appendChild(option);
            }
        };
    </script>
    </html>
    

    相关文章

      网友评论

          本文标题:Ajax

          本文链接:https://www.haomeiwen.com/subject/whwgfqtx.html