关于AJAX的一些基础以及封装

最近在学习AJAX 就顺便拿出来说说! 只是比较浅的理解!

特点

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
举个例子:我们在淘宝的搜索栏中 分别输入哇哈哈然后删去输入nike 搜索栏下面展开的选择栏中的内容在发生变化 但是整个页面没有刷新 在这里插入图片描述在这里插入图片描述

AJAX的基本结构

在AJAX的基本结构中,我将它分为了5步

步骤名称
1创建一个异步对象
2设置请求方式和请求地址
3发送请求
4监听状态的变化
5处理返回的结果
1.在JS文件中我们定义一个对象
 var xmlhttp;
 
 if (window.XMLHttpRequest)
{
    xmlhttp=new XMLHttpRequest();
}
else
{
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

在上面代码中

    xmlhttp=new XMLHttpRequest();

IE7+以及现在的主流的浏览器都可以使用 但低版本的IE就不行 所以用了

window.XMLHttpRequest

如果是IE 7-就会执行

   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

可以说是为了IE操碎了心ε=ε=ε=(#>д<)ノ

2.设置请求方式和请求地址

这里要用到open 例如 xmlhttp.open;

xmlhttp.open("A" , "B" , C);

①这里的A代表的method即方法,我们有POST与GET方法 我们大多数用的是GET方法,GTE相对POST而言更简单也更快,POST适合发送大量数据的是时候(GET会将用户的部分参数例如账号密码放在url后,而POST不会,所以POST 比 GET 更稳定也更可靠)。
②这里的B代表url即路劲,也就是服务器上文件的地址。
③这里的C指的是async即异步,这里填true(异步)或 false(同步),但是ajax 存在的意义就是刷异步请求 所以一般都是true。

3.发送请求

这里要用到send 例如xmlhttp.send();

xmlhttp.send();

这样就会将数据传入后台

4.监听状态的变化

这里我们要明确几个数值,即每个数值代表的状态

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

这里我们就需要onreadystatechange事件来判断

xmlhttp.onreadystatechange=function()
{
}

当我们点击后触发了这个事件后就要用readyState来判断状态码,就是上面的0-4的数值以及状态,当等于4的时候表示请求以及完成执行下一步

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState === 4) 
  {
   
   }
}

当xmlhttp.readyState === 4后 我们就要判断HTTP状态码是否符合,在HTTP状态码中 200~300之间为请求成功 而304是特殊 也算请求成功是留的缓存数据,所以

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState === 4) 
  {
        if (xmlhttp.status >= 200 && xmlhttp.status <= 300 || xmlhttp.status === 304)
         {
          A
         }
        else 
         {
          B
          }
   }
}
5.处理返回的结果

在上诉当xmlhttp.readyState === 4以及xmlhttp.status >= 200 && xmlhttp.status <= 300 || xmlhttp.status === 304后我们就会产生判断

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState === 4) 
  {
        if (xmlhttp.status >= 200 && xmlhttp.status <= 300 || xmlhttp.status === 304)
         {
          A
         }
        else 
         {
          B
          }
   }
}

A与B就是请求成功与失败后返回的结果

下面是一个示例

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script>
    window.onload = function (ev) {
      var oBtn = document.querySelector("button");
      oBtn.onclick = function (ev1) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET" , "AA.txt" , true);
        xmlhttp.send();
        xmlhttp.onreadystatechange = function (ev2) {
          if (xmlhttp.readyState === 4) {
            if (xmlhttp.status >= 200 && xmlhttp.status <= 300 || xmlhttp.status === 304) {
              alert(xmlhttp.responseText);
            }
            else {
              console.log("没有接受到了服务器的数据");
            }
          }
        }
      }
    }  
  </script>
</head>

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

</html>

AJAX的封装

我们不想每次都用到AJAX的时候都去写一遍上诉的代码 会很麻烦,那我们就用一个JS文件来封装AJAX,以我们每次想用的时候直调用就可以了

1.我们首先在一个JS文件中写上AJAX的基本格式

function ajax(url, success, error) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "url", true);
    xmlhttp.send();
    xmlhttp.onreadystatechange = function (ev2) {
        if (xmlhttp.readyState === 4) {
            if (xmlhttp.status >= 200 && xmlhttp.status <= 300 || xmlhttp.status === 304) {
                success(xmlhttp);
            }
            else {
                error(xmlhttp);
            }
        }
    }
}

2.html方面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="./myAjax.js"></script>
  <script>
    window.onload = function (ev) {
      var oBtn = document.querySelector("button");
      oBtn.onclick = function (ev1) {
          ajax("AA.txt",
          function(xmlhttp){
              alert(xmlhttp.responseText);
          },
          function(xmlhttp){
              alert("请求失败")
          })
      }
    }  
  </script>
</head>
<body>
  <button>发送请求</button>
</body>
</html>

在HTML中我们点击按钮后直接掉调用JS文件中的AJAX函数(script src="./myAjax.js"></script 指的就是那上面的JS文件),AJAX传入URL,成功以及失败后的方法。
用了封装后就会很简单的使用每次。


当然除了用原生JS来写AJAX以外,用jquery也能更方便的写,这里就介绍jquery的AJAX封装。

首先我们要引入jquery.js,(小插曲,其实jquery有很多版本现在的jquery官网上也看得到,1.x,2.x,3.x,至于选择,其实我们打开很多大公司的网页发现都是用的1.x其实也是兼容性好吧),这里我写了一个示例

  <script>
    window.onload = function (ev) {
      var oBtn = document.querySelector("button");
      oBtn.onclick = function (ev1) {
        $.ajax({
          type: "GET",
          url: "jquery.txt",
          data: "userName=dmj&userPassword=120140733",
          success: function (mes) {
            alert(mes);
          },
          error:function(xhr){
            alert(xhr.status);
          }
        });
      }
    }  
  </script>
</head>

<body>
  <button>点击发送</button>
</body>

主要的是

$.ajax({

   type: "",

   url: "",

   data: "",

   success: function(msg){

     alert( "Data Saved: " + msg );

   }

});

①data是发送到服务器的数据例如data: “userName=dmj&userPassword=120140733”,就是你发送了userName为dmj和userPassword=120140733这个两个数据到服务器 具体就想表单传送账号和密码
②type就是GET以及POST 默认为GET

jquery和原生的一些比较

原生其实对大小写很敏感,你GET是不能用get的 而jquery是可以的 ,当然你在原生里面写上大小写转换的代码也是可以的。
在jquery中你type url或者data等顺序发生改变都是可以的。

值得注意的是在jquery封装中,每一段结束必须要用逗号,隔开不然会报错。


最后

在学ajax的时候如果你将你的电脑自身弄成服务器的话可能很难理解到,因为send这个地方会报错。之前搜索过一些 如果你测试PHP的话可以用wampsever,如果直接用的话可以试试WebStorm。

后续继续学习后会进行补充。

to be continue… …

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值