Ajax——11——POST使用和封装

一:post的使用

关键代码,与get不同的地方

 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                //3.发送请求  异步对象发送请求
                //传参
                xmlhttp.send("userName=zs&userPwd=321");

HTML代码 b.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 括号里的ev,ev1,是event事件对象,所有的鼠标移动,键盘点击的详细状况都保存在这个形参里面-->
    <script>
        window.onload=function(ev){
            var oBtn=document.querySelector("button")
            oBtn.onclick=function(ev1){
                //兼容IE
                var xhr;
                if (window.XMLHttpRequest)
                {// code for IE7+, Firefox, Chrome, Opera, Safari
                    xhr=new XMLHttpRequest();
                }
                else
                {// code for IE6, IE5
                    xhr=new ActiveXObject("Microsoft.XMLHTTP");
                }
                //2.设置请求方式和请求地址(给创建的异步对象设置)
                /*
                method:请求的类型:GET或POST
                url:文件在服务器上的位置
                async:true(异步)或false(同步)  AJAX是异步请求,所以括号里永远填true
                */
                xhr.open("POST","a.php?t="+(new Date().getTime()),true)
                //注意点:以下代码必须放到open和send之间
                xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

                //3.发送请求  异步对0象发送请求
                //传参
                xhr.send("userName=zs&userPwd=321");
                //4.监听状态的变化  监听的是异步对象的变化  只要异步请求发生了变化,就调用这个回调函数,代表请求已经完成
                xhr.onreadystatechange=function(ev2){
                    if(xhr.readyState===4){
                        /*
                        存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

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

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

                    }
                }

            }
        }
    </script>
</head>
<body>
<button>发送请求</button>
</body>
</html>


php代码 a.php

<?php
echo $_POST["userName"];
echo "<br>";
echo $_POST["userPwd"];

二:POST的封装

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")
            oBtn.onclick=function(ev1){
                //调用自己封装的js
              Ajax("POST","a.php",{
              "userName":"lnj",
                  "userPwd":"321"
              },3000,function(xhr){
              alert(xhr.responseText);
              },function(xhr){
              alert("请求失败")
              });
                }

            }

    </script>

</head>
<body>
<button>发送请求</button>
</body>
</html>

php代码 a.php

<?php
echo $_POST["userName"];
echo "<br>";
echo $_POST["userPwd"];

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(type,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
    */
    if(type==="GET"){
        xmlhttp.open(type,url+"?"+str,true)
        //3.发送请求  异步对0象发送请求
        xmlhttp.send();
    }else{
        xmlhttp.open(type,url,true)
        //注意点:以下代码必须放到open和send之间
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send(str);
    }

    //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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值