AJAX笔记一之应用篇

AJAX实际应用篇

一句话理解什么是AJAX?

在页面不刷新的情况下, 与服务器交换数据,并且向服务器发送 HTTP 请求.

Ajax包括哪些内容:

  • XHTML和CSS
  • 使用文档对象模型(Document Object Model)作动态显示和交互
  • 使用XML和XSLT做数据交互和操作
  • 使用XMLHttpRequest进行异步数据接收

利用AJAX可以实现的应用场景:

  • 注册时,输入用户名自动检测用户是否已经存在。
  • 登陆时,提示用户名密码错误
  • 删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。

原生AJAX的介绍及对应的方法和属性:

介绍:

Ajax的核心是XMLHttpRequest对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。

XHR的主要方法有:

  1. void open(String method,String url,Boolen async)
   用于创建请求    
      参数:
        method: 请求方式(字符串类型),如:POST、GET、DELETE...
        url:    要请求的地址(字符串类型)
        async:  是否异步(布尔类型) 
  1. void send(String body)
   用于发送请求
      参数:
         body: 要发送的数据(字符串类型) 
  1. void setRequestHeader(String header,String value)
   用于设置请求头
       参数:
         header: 请求头的key(字符串类型)
         vlaue:  请求头的value(字符串类型)
  1. String getAllResponseHeaders()
   获取所有响应头
       返回值:
         响应头数据(字符串类型)
  1. String getResponseHeader(String header)
   获取响应头中指定header的值
       参数:
         header: 响应头的key(字符串类型)
       返回值:
          响应头中指定的header对应的值
  1. void abort()
      终止请求

XHR的主要属性有:

  1. Number readyState
    状态值(整数),可以确定请求/响应过程的当前活动阶段
0:未初始化。未调用open()方法
1:启动。已经调用open()方法,未调用send()方法
2:发送。已经调用send()方法,未接收到响应
3:接收。已经接收到部分数据
4:完成。已经接收到全部数据,可以在客户端使用
  1. Function onreadystatechange
当readyState的值改变时自动触发执行其对应的函数(回调函数)
  1. String responseText
作为响应主体被返回的文本(字符串类型)
  1. XmlDocument responseXML
服务器返回的数据(Xml对象)
  1. Number states
状态码(整数),如:200、404... 
  1. String statesText
 状态文本(字符串),如:OK、NotFound...

常用的两种原生请求方式:

GET请求 [GET用于向服务器查询某些信息]:

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>发送 GET 请求</title>
  </head>
  <body>
      <button>点击发送 AJAX 请求</button>
      <h2></h2>   
      <script>
          //获取按钮   
          let btn = document.querySelector('button');
          let h2 = document.querySelector('h2');
          btn.onclick = function(){
              //1. 创建 XMLHttpRequest 对象
              let xhr = new XMLHttpRequest();
              //2. 初始化 『设置请求行的内容』   http://192.168.36.25/server
              xhr.open('get', 'http://127.0.0.1/server');
              //3. 发送
              xhr.send();
              //4. 绑定事件, 获取响应结果
              // on  when 当....时候
              // readyState 是xhr对象中的一个属性. 属性的值有 5 个.  0 1 2 3 4
              // change  改变
              xhr.onreadystatechange = function(){
                  //当所有的响应结果都已经返回时
                  if(xhr.readyState === 4){
                      //处理服务器返回的结果
                      //响应状态码
                      console.log(xhr.status);
                      //响应状态字符串『了解』
                      console.log(xhr.statusText);
                      //响应头 『了解』
                      console.log(xhr.getAllResponseHeaders());
                      //响应体
                      console.log(xhr.response);
                      //设置 h2 标签的文本 -->响应到页面的文本``
                      h2.innerHTML = xhr.response;
                  }
              }
          }
      </script>
  </body>
  </html>

POST请求 [POST请求用于向服务器发送应该被保存的数据。POST请求的主体可以包含非常多的数据,而且格式不限。]:

```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>发送 POST 请求</title>
    <style>
        div{
            width:200px;
            height:200px;
            border:solid 2px #999;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        //获取元素
        let div = document.querySelector('div');
        //绑定事件
        div.onmouseover= function(){
            let xhr = new XMLHttpRequest();
            //设置请求头
            xhr.open('POST', 'http://127.0.0.1/server');
            //设置请求头  set 设置 request 请求  header 头
            xhr.setRequestHeader('class','H5210607');
            xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
            //设置请求体
            xhr.send('a=100&b=200');
            xhr.onreadystatechange = function(){
                //判断
                if(xhr.readyState === 4){
                    if(xhr.status >= 200 && xhr.status < 300){
                        //将响应体的结果  在 div 中呈现
                        div.innerHTML = xhr.response;
                    }
                }
            }
        }
    </script>
</body>
</html>
```

Jquery中的AJAX:

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>jquery 发送 AJAX</title>
      <script crossorigin="anonymous" src='https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js'></script>
      <style>
          #result{
              width: 200px;
              height:100px;
              border:solid 1px #ddd;
          }
      </style>
  </head>
  <body>
      <button>GET</button>
      <button>POST</button>
      <button>通用方式发送请求</button>
      <hr>
      <div id="result"></div>
      <script>
          $('button').eq(0).click(function(){
              //http://127.0.0.1/jquery-server?a=100&b=200
              $.get('http://127.0.0.1/jquery-server', {a:100, b:200}, function(data){
                  console.log(data);
              });
          });
          //发送 POST 请求
          $('button').eq(1).click(function(){
              $.post('http://127.0.0.1/jquery-server', {c:300,d:400}, function(data){
                  // console.log(data);
                  $('#result').html(data);
              });
          }); 
          //通用方法发送
          $('button').eq(2).click(function(){
              $.ajax({
                  //请求类型
                  type: 'get',
                  //url
                  url: 'http://192.2.10.56/jquery-server',
                  //数据  参数
                  data: {
                      e:500,
                      f:600
                  },
                  //成功的回调
                  success: function(data){
                      console.log(data);
                  },
                  error: function(){
                      alert('请求失败');
                  },
                  timeout: 1000
              });
          });
      </script>
  </body>
  </html>
posted @ 2021-09-02 16:57  拾呓  阅读(35)  评论(0编辑  收藏  举报