Ajax

Ajax
    Asynchronous javascript and xml
    异步刷新技术
    核心是XMLHttpRequest

    通常get比post多

    步骤
        var xhr = new XMLHttpRequest();
        准备发送    open(type,url,async)   false代表同步  true异步
        发送        send(null);          有需要就填写,没有可以不填
                    ###xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
                    得到四个响应的xhr
                    responseText ---- 响应主体返回的文本
                    status       ---- 响应HTTP状态码
                    statusText   ---- HTTP状态说明
    状态码     状态说明                含义
    200        OK                      请求成功
    400        Bad Request             请求出错
    404        Not Found               请求页面未找到/路径问题
    500        Internal Server Error   服务器问题


    异步加载需要触发onreadystatechange事件.检测readyState的属性
     readyState
        0           未初始化      发送过程还没发生open()未调用
        1           启动          open()调用   send()未调用
        2           发送          send()调用   未接受响应
        3           接收          已经接收到了一部书数据了
        4           完成          数据接收完成

    两种头信息
        响应头信息   服务器返回的信息    可以获取的但是不可以设置
        请求头信息   客户端发送的信息    可以设置的但是不可以获取


    ipconfig /flushdns

    本地映射
    修改host文件
    AppServ\Apache2.2\conf\extra\httpd-vhosts.conf
    <VirtualHost *:80>
        DocumentRoot "C:\AppServ\www\xq"
        ServerNamed www.xq.com
        ErrorLog "logs/xq-error.log"
        CustomLog "logs/xq-access.log" common
    </VirtualHost>

讲解

<!DOCTYPE html >
<html lang="en" onselectstart="return false">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
            h1 {text-align: center;}
        </style>
    </head>
<body onselectstart="return false">
<h1>点击显示时间</h1>
<h1 id="txt"></h1>
<script type="text/javascript">
    /*
        ajax

        //现在不存在兼容问题
        var xhr = nex XMLHttpRequest();
     */
     // 同步
     // bind(document,'click',function(){
     //       //创建xhr对象
     //    var xhr = new XMLHttpRequest();
     //    // 准备发送  (类型,后台,同步异步)
     //    // //同步false.异步true
     //    xhr.open('get','index.php?rand='+Math.random(),false);  //ie
     //    // xhr.open('get','index.php',false);
     //    xhr.send(null);
     //    document.querySelector("#txt").innerHTML = xhr.responseText;
     // });

     // 异步
     bind(document,'click',function(){
           //创建xhr对象
        var xhr = new XMLHttpRequest();
        //异步一定会触发onreadystatechange检测readyState
        xhr.onreadystatechange = function(){
            // console.log(1);
            /*
                status       ---- 响应HTTP状态码
                statusText   ---- HTTP状态说明
             */
            // console.log(xhr.status+"==="+xhr.statusText);
            // 数据接受完成  通过检测readyState的属性
            if(xhr.readyState == 4){
                // 请求成功
                if(xhr.statusText == "OK"){
                    //  拿到数据responseText
                    document.querySelector("#txt").innerHTML = xhr.responseText;
                    // 获取响应头信息 服务器信息   可以获取的但是不可以设置
                    // alert(xhr.getResponseHeader("Server"));
                    // alert(xhr.getAllResponseHeaders());//全部头信息
                }else{
                    alert("错误状态码:"+xhr.status+"====错误状态说明"+xhr.statusText);
                };
            };
        };

        // 准备发送  (类型,后台,同步异步)
        xhr.open('get','index.php?rand='+Math.random(),true);  //ie
        // xhr.open('get','index.php',false);

        // 可以设置请求头信息
        xhr.setRequestHeader("user",'weikeduopp');
        xhr.setRequestHeader("user-sex",'man');
        // 异步需要设置请求头信息 !!!!当要发送数据的时候异步这个必须要设置  不发送的话.写不写都可以.
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

        //发送请求 如果有数据提交就写 没有就不用写
        xhr.send(null);
        document.querySelector("#txt").innerHTML = xhr.responseText;
     });


     function bind(obj,eventName,fn){
        if(obj.attachEvent){
            obj.attachEvent("on"+eventName,fn);
        }else{
            obj.addEventListener(eventName,function(){
                fn.call(obj);
            },false);
        }
     };
        // 之前不兼容的
     function createXHR(){
         if(typeof XMLHttpRequest != "undefined"){
             return new XMLHttpRequest();
         }else if(typeof ActiveXObject != "undefined"){
            // 这只是IE,
             var version = [
                 'MSXML2.XMLHttp.6.0',
                 'MSXML2.XMLHttp.3.0',
                 'MSXML2.XMLHttp',
             ];
             for(var i=0;i<version.length;i++){
                 try{
                     return new ActiveXObject(version[i]);
                 }catch(e){
                     //跳过
                 }
             }
         }else{
             throw new Error("你的系统或者浏览器不支持XHR对象");
         }
     };
</script>
</body>
</html>

index.php

<?php
    header("Content-Type:text/html;charset=utf-8");
    echo date('Y-m-d H:i:s');
    //get post
    if($_POST['user']=='xq' && $_POST['age']==18)
    {
        echo "post欢迎回来~~!";
    }
    else if($_GET['user']=='xq' && $_GET['age'] ==18)
    {
        echo "get欢迎回来!";
    }
?>

get post 的发送方式

<!DOCTYPE html >
<html lang="en" onselectstart="return false">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
            h1{width: 300px;margin: 30px auto;text-align: center;}
        </style>
    </head>
<body onselectstart="return false">
<h1>点击显示时间</h1>
<h1 id="txt"></h1>
<script type="text/javascript">
    /*
        ajax

        //现在不存在兼容问题
        var xhr = nex XMLHttpRequest();
     */
     // 同步
     // bind(document,'click',function(){
     //       //创建xhr对象
     //    var xhr = new XMLHttpRequest();
     //    // 准备发送  (类型,后台,同步异步)
     //    // //同步false.异步true
     //    xhr.open('get','index.php?rand='+Math.random(),false);  //ie
     //    // xhr.open('get','index.php',false);
     //    xhr.send(null);
     //    if(xhr.readyState == 4){
     //     // 请求成功
     //     if(xhr.status == 200){
     //         //  拿到数据responseText
     //         document.querySelectorAll("h1")[1].innerHTML = xhr.responseText;
     //     }else{
     //         alert("错误状态码:"+xhr.status+"====错误状态说明"+xhr.statusText);
     //     };
     // };
     // });

     // 异步
     bind(document,'click',function(){
           //创建xhr对象
        var xhr = createXHR();
        //异步一定会触发onreadystatechange检测readyState
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4){//!!!readyState 的S是大写.
                // 请求成功
                if(xhr.status == 200){
                    //  拿到数据responseText
                    document.querySelectorAll("h1")[1].innerHTML = xhr.responseText;
                }else{
                    alert("错误状态码:"+xhr.status+"====错误状态说明"+xhr.statusText);
                };
            };
        };

        // 准备发送  (类型,后台,同步异步)
        // xhr.open('get','index.php?rand='+Math.random(),true);  //ie
        xhr.open('get','index.php?user=xq&age=18',true);//get
        // xhr.open('post','index.php',true);//post

        // 异步需要设置请求头信息 !!!!当要发送数据的时候异步这个必须要设置  不发送的话.写不写都可以.
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        //get 提交方式不需要发送数据的
        xhr.send(null);
        //post 需要发送数据的
        // xhr.send('user=xq&age=18');
     });

     function createXHR(){
         if(typeof XMLHttpRequest != "undefined"){
             return new XMLHttpRequest();
         }else if(typeof ActiveXObject != "undefined"){
             var version = [
                 'MSXML2.XMLHttp.6.0',
                 'MSXML2.XMLHttp.3.0',
                 'MSXML2.XMLHttp',
             ];
             for(var i=0;i<version.length;i++){
                 try{
                     return new ActiveXObject(version[i]);
                 }catch(e){
                     //跳过
                 }
             }
         }else{
             throw new Error("你的系统或者浏览器不支持XHR对象");
         }
     };
     function bind(obj,eventName,fn){
        if(obj.attachEvent){
            obj.attachEvent("on"+eventName,function(){
                fn.call(obj);
            });
        }else{
            obj.addEventListener(eventName,function(){
                fn.call(obj);
            },false);
        }
     };

</script>
</body>
</html>

将拿来的数据处理,添加到页面

person.json文件==>url

[
    {
        "name":"xq",
        "age":18
    },
    {
        "name":"内酷",
        "age":18
    },
    {
        "name":"不幽默先生",
        "age":18
    },
    {
        "name":"RAMWIRE",
        "age":18
    },
    {
        "name":"茅草屋",
        "age":18
    }
]
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
            table {border-collapse: collapse; margin: 50px auto; width: 500px;}
            td {text-align: center;}
        </style>
    </head>
<body>
    <table border="1" >
        <tr>
            <th>name</th>
            <th>age</th>
        </tr>
        <tbody id="box"></tbody>
    </table>
<script type="text/javascript">
    bind(document,'click',function(){
       var xhr = createXHR();
       xhr.onreadystatechange = function(){
           if(this.readyState == 4){
                if( this.status == 200){
                   //  拿到数据responseText  ==>字符串
                   var data = JSON.parse(this.responseText);
                   td(data);//===>处理
                }else{
                   alert("错误状态码:"+xhr.status+"====错误状态说明"+xhr.statusText);
                };
           };
       };
       xhr.open('get','person.json',true);
       xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
       xhr.send(null);

    });

    var $tbody = document.getElementById("box");
    // console.log($tbody.innerHTML);
    //数据的处理
    function td(json){
        // <!-- <tr>
        //     <td>name</td>
        //     <td>age</td>
        // </tr> -->
        for(var i=0;i<json.length;i++){
            var param = json[i];
            var temp = '';
            for(var k in param){
                temp += "<td>"+param[k]+"</td>";
            };
            $tbody.innerHTML += "<tr>"+temp+"</tr>";
        };
    };

        // var tbody = document.getElementById("tbody");
        // function td(json){
        //     for(var i=0;i<json.length;i++){
        //         var tr = tbody.insertRow(tbody.rows.length);
        //         var obj = json[i];
        //         for(var k in obj){
        //             var td = tr.insertCell(tr.cells.length);
        //             td.innerText = obj[k];
        //         };
        //     };
        // };

    function createXHR(){
        if(typeof XMLHttpRequest != "undefined"){
            return new XMLHttpRequest();
        }else if(typeof ActiveXObject != "undefined"){
            var version = [
                'MSXML2.XMLHttp.6.0',
                'MSXML2.XMLHttp.3.0',
                'MSXML2.XMLHttp',
            ];
            for(var i=0;i<version.length;i++){
                try{
                    return new ActiveXObject(version[i]);
                }catch(e){
                    //跳过
                }
            }
        }else{
            throw new Error("你的系统或者浏览器不支持XHR对象");
        }
    };
    function bind(obj,eventName,fn){
       if(obj.attachEvent){
           obj.attachEvent("on"+eventName,function(){
               fn.call(obj);
           });
       }else{
           obj.addEventListener(eventName,function(){
               fn.call(obj);
           },false);
       }
    };
</script>
</body>
</html>

封装ajax.js

模型
 *  ajax({
 *      method: "get",
 *      url:'index.php?',
 *      data:{
 *          user:name,
 *          age:18
 *      },
 *      success:function(txt){
 *
 *      },
 *      async: true
 *  })
/**
 *
 * @authors weikeduopp
 * @date    2017-04-09 02:19:58
 * @version $Id$
 *
 *
 *  ajax({
 *      method: "get",
 *      url:'index.php?',
 *      data:{
 *          user:name,
 *          age:18
 *      },
 *      success:function(txt){
 *
 *      },
 *      async: true
 *  })
 *
 *
 *
 *
 */

 function ajax(json){
       var xhr = createXHR();
       json.data = param(json.data);//数据==>字符
       if(json.method === "get"){
            json.url += json.url.indexOf("?") == -1?"?"+json.data:json.data;  //如果有? .
       };
       if(json.async === true){ //异步
           xhr.onreadystatechange = function(){
               if(xhr.readyState == 4){
                    if( xhr.status == 200){
                        //将数据怎么处理
                       json.success(xhr.responseText);
                    }else{
                       alert("错误状态码:"+xhr.status+"====错误状态说明"+xhr.statusText);
                    };
               };
           };
       }
       // 'index.php?user=name&age=18'
       xhr.open(json.method,json.url,json.async);
       if(json.method === "post"){
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send(json.data);
       }else{
            xhr.send(null);
       };
       if(json.async === false){ //同步
            if( xhr.status == 200){
               json.success(xhr.responseText);
            }else{
               alert("错误状态码:"+xhr.status+"====错误状态说明"+xhr.statusText);
            };
       };
 };

 function param(data){
    var arr = [];
    for(var k in data){
        // encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
        arr.push(encodeURIComponent(k)+"="+encodeURIComponent(data[k]));
    }
// user=name&age=18
    return arr.join("&");
 };




 function createXHR(){
     if(typeof XMLHttpRequest != "undefined"){
         return new XMLHttpRequest();
     }else if(typeof ActiveXObject != "undefined"){
         var version = [
             'MSXML2.XMLHttp.6.0',
             'MSXML2.XMLHttp.3.0',
             'MSXML2.XMLHttp',
         ];
         for(var i=0;i<version.length;i++){
             try{
                 return new ActiveXObject(version[i]);
             }catch(e){
                 //跳过
             }
         }
     }else{
         throw new Error("你的系统或者浏览器不支持XHR对象");
     }
 };
 function bind(obj,eventName,fn){
    if(obj.attachEvent){
        obj.attachEvent("on"+eventName,function(){
            fn.call(obj);
        });
    }else{
        obj.addEventListener(eventName,function(){
            fn.call(obj);
        },false);
    }
 };

验证.还是用上面index.php

<!DOCTYPE html>
<html lang="en" onselectstart="return false">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="Author" content="">
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <title>Document</title>
        <style type="text/css">
            * {margin: 0; padding: 0;}
            a {text-decoration: none;}
            ul,li {list-style: none;}
            body {font-family: "Microsoft yahei";}
            h1{width: 300px;margin: 30px auto;text-align: center;}
        </style>
    </head>
<body>
<h1>点击显示</h1>
<h1 id="txt"></h1>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">
    bind(document,"click",function(){
        ajax({
            method:'get',
            url:'index.php',
            //data:{
            //    'user':'xq',
            //    'age':18
            //},
            success:function(txt){
                document.getElementById("txt").innerHTML = txt;
            },
            async:false
        });
    });
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值