Ajax

2018-11-18  本文已影响0人  致自己_cb38

1、跨域:

<!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、计算机组成原理:

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

Asynchronous Javascript And XML(异步 JavaScript 和 XML)

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

JSON对象与字符串相互转化

let obj = JSON.parse(str);
let obj = eval('('+str+')');
let obj = JSON.stringify(str);

5、Ajax步骤:

if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = new ActiveXObjext('microsoft.XMLHTTP');
}
<!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>
上一篇下一篇

猜你喜欢

热点阅读