AJAX

AJAX的定义

AJAX是异步的JavaScript和XML;
AJAX是一种用于创建更好更快以及交互性更强的Web应用程序的技术;
AJAX是一种独立于Web服务器软件的浏览器技术;
AJAX不是一种新的编程语言,而是一种技术;
AJAX 使用 JavaScript 在web 浏览器与 web 服务器之间来发送和接收数据(前端后端交互);
AJAX在浏览器与Web服务器之间使用异步数据传输(HTTP请求)。
在这里插入图片描述

XMLHttpRequest

XMLHttpRequest使用方法

步骤:
1.创建XMLHTTPRequest对象
2.使用open()方法设置和服务器的交互信息
3.设置requestHeader()
4.设置发送的数据,开始和服务器端交互
5.取得响应,注册事件
6.如果请求完成,并且响完成,可以获取到响应数据
7.响应解码

实例

<!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>AJAX的基本使用</title>
</head>
<body>
    <button onclick="getData()">获取数据</button>
    <script>
        function getData(){
            // 发送请求
            // 1.使用XMLHttpRequest创建一个实例
            var request=new XMLHttpRequest();
            // 2.使用open方法设置和服务器的交互信息
            request.open('get','https://api.muxiaoguo.cn/api/lishijr');
            // 3.设置requestHeader() 如果默认可不设置requestHeader
            // request.setRequestHeader()
            // 4.send()发送请求
            request.send()
            // 5.获取响应 如果请求完成,并且响应完成,获取到响应数据
            request.onreadystatechange=function(){
                // status===200 readyState===4
                if(request.readyState===4&&request.status===200){
                    console.log(request.responseText);
                    var res=JSON.parse(request.responseText)
                    console.log(res);
                    // 根据数据添加对应的节点
                    for(var arrIndex in res.data){
                        // 创建一个节点
                        var p=document.createElement('p');
                        p.innerHTML=res.data[arrIndex].title;
                        document.body.appendChild(p);
                    }
                }
            }
        }
    </script>
</body>
</html>
常用请求使用
<!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>常用请求使用</title>
    <!-- 引入序列化工具 -->
    <script src="./qs.js"></script>
</head>
<body>
     <button onclick="getParams()">获取有参get请求</button>
     <button onclick="postNo()">post无参</button>
     <button onclick="toLogin()">登录</button>
     <script>
   		// 使用get发送有参请求
         function getParams(){
             var request=new XMLHttpRequest();
            // 第一种方式 拼接字符串
            //request.open('get','https://api.muxiaoguo.cn/api/tianqi?' + 'city=' + '苏州' + '&' + 'type=' + '1');         
            // 第二种方式 传递序列化后的参数
            var params={
                city:'苏州',
                type:1
            }
            // 参数序列化 要先引入QS序列化工具
            var qs=Qs;
            request.open('get','https://api.muxiaoguo.cn/api/tianqi?'+qs.stringify(params));
            request.send();
            console.log(qs.stringify(params));
            request.onreadystatechange=function(){
                if(request.readyState===4&&request.status===200){
                    console.log(request.responseText);
                }
            }
        }
				
		// 使用post发送无参请求
		 function postNo() {
		    var request = new XMLHttpRequest()
		    request.open('post','https://api.muxiaoguo.cn/api/Gushici');
		    request.send();
		    request.onreadystatechange = function () {
		      if (request.readyState === 4 && request.status === 200) {
		        console.log(request);
		      }
		    }
		  }
				  
		// 使用post发送有参请求
		function toLogin(){
            var user={
                password:'123321',
                username:'admin1'
            }
            // 1.创建XHR实例
            var request=new XMLHttpRequest();
            // 2.设置open()
            request.open('post','http://139.196.88.7:8888/user/login');
            // 3. 设置请求头
            request.setRequestHeader('Content-type','application/json');
            // 4.发送请求
            request.send(JSON.stringify(user));
            // 5.获取响应
            request.onreadystatechange=function(){
                if(request.readyState===4 && request.status===200){
                    // console.log(request.responseText);
                    var res = JSON.parse(request.responseText)
                    console.log(res.data.token);
                }
            }
        }
     </script>
</body>
</html>

AJAX的封装

//针对行学天下系统 在引入util.js之前 要引入qs
var qs = Qs;
// 替换成自己的swagger地址
var baseURL = 'http://139.196.172.209:8888';
//1.提供登录方法,提供获取token方法
// user = {username:'',password:''}
function login(user) {
  var httpRequest = new XMLHttpRequest();
  httpRequest.open('post', baseURL + '/user/login');
  // 设置请求头部
  httpRequest.setRequestHeader('Content-Type', 'application/json');
  // 最终传递的数据
  httpRequest.send(JSON.stringify(user));
  //接受响应
  httpRequest.onreadystatechange = function () {
    if (httpRequest.readyState === 4 && httpRequest.status === 200) {
      //处理响应数据
      var res = httpRequest.responseText;
      var token = JSON.parse(res).data.token;
      //保存到sessionStorage中
      sessionStorage.setItem('token', token);
    }
    if (httpRequest.readyState === 4 && httpRequest.status === 500) {
      console.log('错误:', httpRequest.responseText);
    }
  }
}
//2.myAjax对象,对象里有get方法,postForm方法,postJSON方法
var myAjax = {
  get: function (url, params, success, error) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.open('get', baseURL + url + "?" + qs.stringify(params));
    // httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    //认证
    httpRequest.setRequestHeader("Authorization", sessionStorage.getItem('token'));
    //发送请求
    httpRequest.send();
    httpRequest.onreadystatechange = function () {
      if (httpRequest.readyState === 4 && httpRequest.status === 200) {
        success(JSON.parse(httpRequest.responseText));
      }
      if (httpRequest.readyState === 4 && httpRequest.status === 500) {
        error(JSON.parse(httpRequest.responseText));
      }
    }
  },
  postForm: function (url, params, success, error) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.open('post', baseURL + url);
    httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    //认证
    httpRequest.setRequestHeader(" Authorization", sessionStorage.getItem('token'));
    //发送数据
    httpRequest.send(qs.stringify(params));
    httpRequest.onreadystatechange = function () {
      if (httpRequest.readyState === 4 && httpRequest.status === 200) {
        success(JSON.parse(httpRequest.responseText));
      }
      if (httpRequest.readyState === 4 && httpRequest.status === 500) {
        error(JSON.parse(httpRequest.responseText));
      }
    }
  },
  postJSON: function (url, params, success, error) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.open('post', baseURL + url);
    httpRequest.setRequestHeader('Content-Type', 'application/json');
    //认证
    httpRequest.setRequestHeader(" Authorization", sessionStorage.getItem('token'));
    //发送数据
    httpRequest.send(JSON.stringify(params));
    httpRequest.onreadystatechange = function () {
      if (httpRequest.readyState === 4 && httpRequest.status === 200) {
        success(JSON.parse(httpRequest.responseText));
      }
      if (httpRequest.readyState === 4 && httpRequest.status === 500) {
        error(JSON.parse(httpRequest.responseText));
      }
    }
  }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值