原生Ajax详解--发送请求步骤详细剖析 !!!

发送Ajax请求步骤:

1、创建XMLHttpRequest对象
2、准备发送
3、执行发送动作
4、指定回调函数

第一步:创建XMLHttpRequest对象

// 1、创建XMLHttpRequest对象
var xhr = null;
 if (window.XMLHttpRequest) {
   xhr = new XMLHttpRequest(); //标准
 } else {
   xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
   //IE6 没有XMLHttpRequest对象,可以采用上面的方式达到相同的效果 !!!
 }

第二步:准备发送

xhr.open(参数一,参数二,参数三)
/*
参数一:请求方式(get获取数据;post提交数据)
参数二:请求地址
参数三:同步或者异步标志位,默认是true表示异步,false表示同步

如果是get请求那么请求参数必须在url中传递
encodeURI()用来对中文参数进行编码,防止乱码
*/

先说 get 请求 :
前端代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>初识Ajax开发</title>
  <script type="text/javascript">
    window.onload = function () {
      var btn = document.getElementById('btn');
      btn.onclick = function () {
        var uname = document.getElementById('username').value;
        var pw = document.getElementById('password').value;

        // 1、创建XMLHttpRequest对象
        var xhr = null;
        if (window.XMLHttpRequest) {
          xhr = new XMLHttpRequest(); //标准
        } else {
          xhr = new ActiveXObject("Microsoft"); //IE6
        }
        // 2、准备发送
        /*
        参数一:请求方式(get获取数据;post提交数据)
        参数二:请求地址
        参数三:同步或者异步标志位,默认是true表示异步,false表示同步

        如果是get请求那么请求参数必须在url中传递
        encodeURI()用来对中文参数进行编码,防止乱码,可以不用,不会出现乱码
        */
        var param = 'username=' + uname + '&password=' + pw;
        xhr.open('get', './03get.php?' + param, true);
        // 3、执行发送动作
        xhr.send(null); //get请求这里需要添加null参数
        // 4、指定回调函数
        xhr.onreadystatechange = function () {
          if (xhr.readyState == 4) {
            if (xhr.status == 200) {
              alert(xhr.responseText);
            }
          }
        }

      }
    }
  </script>
</head>

<body>
  <form>
    用户名:
    <input type="text" name="username" id="username"><span id="info"></span>
    <br> 密码:
    <input type="text" name="password" id="password">
    <input type="button" value="登录" id="btn">
  </form>
</body>

</html>

后端代码:

<?php
$uname = $_GET['username'];
$pw = $_GET['password'];

if ($uname == 'admin' && $pw == '123') {
  echo 1;
} else {
  echo $uname;
}

再来说 post 请求 :

前端代码 :

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>初识Ajax开发</title>
  <script type="text/javascript">
    window.onload = function () {
      var btn = document.getElementById('btn');
      btn.onclick = function () {
        var uname = document.getElementById('username').value;
        var pw = document.getElementById('password').value;

        // 1、创建XMLHttpRequest对象
        var xhr = null;
        if (window.XMLHttpRequest) {
          xhr = new XMLHttpRequest(); //标准
        } else {
          xhr = new ActiveXObject("Microsoft"); //IE6
        }
        // 2、准备发送
        /*
        参数一:请求方式(get获取数据;post提交数据)
        参数二:请求地址
        参数三:同步或者异步标志位,默认是true表示异步,false表示同步
        
        post请求参数通过send传递,不需要通过encodeURI()转码
        必须设置请求头信息
        */
        var param = 'username=' + uname + '&password=' + pw;
        xhr.open('post', '04post.php', false);
        // 3、执行发送动作
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(param); //post请求参数在这里传递,并且不需要转码
        // 4、指定回调函数
        console.log(123)
        xhr.onreadystatechange = function () {
          if (xhr.readyState == 4) {
            if (xhr.status == 200) {
              console.log(xhr.responseText)
              alert(xhr.responseText);
            }
          }
        }
      }
    }
  </script>
</head>

<body>
  <form>
    用户名:
    <input type="text" name="username" id="username"><span id="info"></span>
    <br> 密码:
    <input type="text" name="password" id="password">
    <input type="button" value="登录" id="btn">
  </form>
</body>

</html>

后端代码 :

<?php
$uname = $_POST['username'];
$pw = $_POST['password'];

if ($uname == 'admin' && $pw == '123') {
  echo 1;
} else {
  echo $uname;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>初识Ajax开发</title>
  <script type="text/javascript">
    window.onload = function () {
      var btn = document.getElementById('btn');
      btn.onclick = function () {
        var uname = document.getElementById('username').value;
        var pw = document.getElementById('password').value;

        // 1、创建XMLHttpRequest对象
        var xhr = null;
        if (window.XMLHttpRequest) {
          xhr = new XMLHttpRequest(); //标准
        } else {
          xhr = new ActiveXObject("Microsoft"); //IE6
        }
        // readyState=0表示xhr对象创建完成
        console.log(xhr.readyState + '----------1-----------');
        // 2、准备发送
        /*
        参数一:请求方式(get获取数据;post提交数据)
        参数二:请求地址
        参数三:同步或者异步标志位,默认是true表示异步,false表示同步
        
        post请求参数通过send传递,不需要通过encodeURI()转码
        必须设置请求头信息
        */
        var param = 'username=' + uname + '&password=' + pw;
        xhr.open('post', '04post.php', true);
        // 3、执行发送动作
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
        xhr.send(param); //post请求参数在这里传递,并且不需要转码
        // 4、指定回调函数
        // readyState=1表示已经发送了请求
        console.log(xhr.readyState + '----------2-----------');
        // 该函数调用的条件就是readyState状态发生变化(不包括从0变为1)
        xhr.onreadystatechange = function () {
          /*
          readyState:
          2 浏览器已经收到了服务器响应的数据
          3 正在解析数据
          4 数据已经解析完成,可以使用了
          */
          console.log(xhr.readyState + '----------3-----------');
          // 4表示服务器返回的数据已经可以使用了,但是这个数据不一定是正常的
          if (xhr.readyState == 4) {
            // http的常见状态码
            /*
            200表示响应成功
            404没有找到请求的资源
            500服务器端错误
            */
            // 200表示服务器返回的数据是正常的,不是200的话表示数据是错误的
            if (xhr.status == 200) {
              // 这里的200表示数据是正常的
              alert(xhr.responseText);
              // xhr.responseXML
            }
          }
        }

      }
    }
  </script>
</head>

<body>
  <form>
    用户名:
    <input type="text" name="username" id="username"><span id="info"></span>
    <br> 密码:
    <input type="text" name="password" id="password">
    <input type="button" value="登录" id="btn">
  </form>
</body>

</html>

第三步:执行发送动作

xhr.send(null); //get请求这里需要添加null参数
xhr.send(param); post请求参数在这里传递,并且不需要转码

第四步:指定回调函数

先来看下面的代码 :

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>初识Ajax开发</title>
  <script type="text/javascript">
    window.onload = function () {
      var btn = document.getElementById('btn');
      btn.onclick = function () {
        var uname = document.getElementById('username').value;
        var pw = document.getElementById('password').value;

        // 1、创建XMLHttpRequest对象
        var xhr = null;
        if (window.XMLHttpRequest) {
          xhr = new XMLHttpRequest(); //标准
        } else {
          xhr = new ActiveXObject("Microsoft"); //IE6
        }
        // readyState=0表示xhr对象创建完成
        console.log(xhr.readyState + '----------1-----------');
        // 2、准备发送
        /*
        参数一:请求方式(get获取数据;post提交数据)
        参数二:请求地址
        参数三:同步或者异步标志位,默认是true表示异步,false表示同步
        
        post请求参数通过send传递,不需要通过encodeURI()转码
        必须设置请求头信息
        */
        var param = 'username=' + uname + '&password=' + pw;
        xhr.open('post', '04post.php', true);
        // 3、执行发送动作
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
        xhr.send(param); //post请求参数在这里传递,并且不需要转码
        // 4、指定回调函数
        // readyState=1表示已经发送了请求
        console.log(xhr.readyState + '----------2-----------');
        // 该函数调用的条件就是readyState状态发生变化(不包括从0变为1)
        xhr.onreadystatechange = function () {
          /*
          readyState:
          2 浏览器已经收到了服务器响应的数据
          3 正在解析数据
          4 数据已经解析完成,可以使用了
          */
          console.log(xhr.readyState + '----------3-----------');
          // 4表示服务器返回的数据已经可以使用了,但是这个数据不一定是正常的
          if (xhr.readyState == 4) {
            // http的常见状态码
            /*
            200表示响应成功
            404没有找到请求的资源
            500服务器端错误
            */
            // 200表示服务器返回的数据是正常的,不是200的话表示数据是错误的
            if (xhr.status == 200) {
              // 这里的200表示数据是正常的
              alert(xhr.responseText);
              // xhr.responseXML
            }
          }
        }

      }
    }
  </script>
</head>

<body>
  <form>
    用户名:
    <input type="text" name="username" id="username"><span id="info"></span>
    <br> 密码:
    <input type="text" name="password" id="password">
    <input type="button" value="登录" id="btn">
  </form>
</body>

</html>

下面是 php代码:

<?php
$uname = $_POST['username'];
$pw = $_POST['password'];

if ($uname == 'admin' && $pw == '123') {
  echo 1;
} else {
  echo $uname;
}

控制台运行结果如下图所示:
指定回调函数
小结:

1. readyState=0表示xhr对象创建完成
2. readyState=1表示已经发送了请求
3. readyState:
    =2 浏览器已经收到了服务器响应的数据
    =3 正在解析数据
    =4 数据已经解析完成,可以使用了
注意: 4表示服务器返回的数据已经可以使用了,但是这个数据不一定是正常的

xhr.status == 200 表示服务器返回的数据是正常的,不是200的话表示数据是错误的

http的常见状态码:
200 表示响应成功
404 没有找到请求的资源
500 服务器端错误    

如果这篇文章能够帮助到你,希望您不要吝惜点赞 ,您的支持是我继续努力的动力 !!!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值