Ajax——10——GET封装

  1. HTML代码


    b.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="d.js"></script>
<!-- 括号里的ev,ev1,是event事件对象,所有的鼠标移动,键盘点击的详细状况都保存在这个形参里面-->
    <script>
        window.onload=function(ev){
            var oBtn=document.querySelector("button");
            //在你的发送请求中,不能出现中文 如何解决这个问题呢  处理参数中,需要将中文转换 比如 "wd=张三" 转换成wd=%E5%BC%AO%E4%B8%89这种类型
            var res=encodeURIComponent("张三");//js中的方法
            console.log(res);
            oBtn.onclick=function(ev1){
                //用ajax提交get请求,get请求会把参数放在url后面
                //url?key=value&&key=value;
        Ajax("a.php",{
            "userName":"lnj",
            "userPwd":"123456"//要把这种对象转换为服务器所需要的的格式
        },3000//设置超时 如果超过3秒,则会终止此次请求
            ,function (xhr){/*地址,请求成功要执行的的回调函数,请求失败的回调函数 括号里是异步对象*/
        alert(xhr.responseText);
                },function(xhr){
        alert("请求失败");
                })

            }
        }
    </script>

</head>
<body>
 <button>发送请求</button>
</body>
</html>
  1. js代码


    d.js
function objtostr(obj){
    /*
            "userName":"lnj",
            "userPwd":"123456"
            "t":"16461231654"
    */
    obj.t=new Date().getTime();
    var res=[];
    for(var key in obj){
        //在url中是不可以出现中文的,如果出现了中文需要转码
        //可以调用encodeURIComponent方法
        //URL中只可以出现字母/数字/下划线/ASCII码
        res.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key]));//[userName=lnj,userPwd=123456];
    }
    return res.join("&");//join方法把数组转换成字符串 ,并且元素与元素之间用&连接 userName=lnj&&userPwd=123456
}
function Ajax(url,obj,timeout,success,error){
    //0.将对象转换为字符串
    var str=objtostr(obj);
    /*三个会变的作为参数 地址,成功要执行的回调函数,失败的函数*/
    //兼容IE
    //1.创建一个异步对象
    var xmlhttp,timer;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    //2.设置请求方式和请求地址(给创建的异步对象设置)
    /*
    method:请求的类型:GET或POST
    url:文件在服务器上的位置
    async:true(异步)或false(同步)  AJAX是异步请求,所以括号里永远填true
    */
    xmlhttp.open("GET",url+"?"+str,true)
    //3.发送请求  异步对0象发送请求
    xmlhttp.send();
    //4.监听状态的变化  监听的是异步对象的变化  只要异步请求发生了变化,就调用这个回调函数,代表请求已经完成
    xmlhttp.onreadystatechange=function(ev2){
        if(xmlhttp.readyState===4){
            clearInterval(timer);//接收到了响应,把定时器关掉
            /*
            存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

           0: 请求未初始化
           1: 服务器连接已建立
           2: 请求已接收
           3: 请求处理中
           4: 请求已完成,且响应已就绪

            */
            //判断是否请求成功  http状态码
            if(xmlhttp.status>=200&&xmlhttp.status<300||
                xmlhttp.status===304){
                //5.处理返回的结果
                /*
                服务器响应
                responseText获得字符串形式的响应数据
                responseXML 获得XML形式的响应数据
                */
               success(xmlhttp);
            }else{
                error(xmlhttp);
            }

        }
    }
    //判断外界是否传入了超时时间
    if(timeout){
        timer=setInterval(function(){
            console.log("中断请求");
            xmlhttp.abort();//中断请求
            clearInterval(timer);
        },timeout);
    }
}
  1. php代码


    a.php
<?php
sleep(5);//当执行到php文件这段代码的时候,就会在这个地方停留五秒 为了验证超时设置是否有效
echo $_GET["userName"];
echo "<br>";
echo $_GET["userPwd"];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值