ajax简易封装与小案例

1.通过ajax访问后台的步骤:
    1:创建一个对象 XMLHttpRequest
    2:  给这个对象绑定一个事件onreadystatechange(自动触发)
    3: 和服务器进行连接
    4: 向服务器发送请求

 XMLHttpRequest这个对象有一个readyState属性这个属性有5个值,分别表示我们向服务器发送ajax请求的不同阶段
     0: 表示XMLHttpRequest对象创建成功,但是open() 方法还没有调用
     1: 表示open() 方法被调用了,但是send()方法没有被调用
     2: 表示send() 方法已经被调用,并且服务器返回的头信息已经被收到了   【http协议】
     3: 表示,正在接收主体数据,但是数据还没有接收完成
     4: 表示XMLHttpRequest对象已经完全接收到后台返回的所有数据, 这个时候我们就可以从这个XMLHttpRequest对象中获取到后台返回的数据

 // 创建一个对象 
    var xhr = new XMLHttpRequest();

    // 给这个对象绑定一个事件,这个事件也是自动触发,不需要人为参与的事件
    // 这个事件就是用来监听readyState属性值的变化的,只要readyState的值发生变化了,这个事件就会被触发
    xhr.onreadystatechange = function() {  // 在这个函数中要获取后台传递过来的数据
      // 判断只有readyState属性的值等于4时,我们才能获取后台传递过来的数据
      if(xhr.readyState == 4) {
        // 拿到后台传递过来的数据
        var res = JSON.parse(xhr.responseText)
        var userList = res.rows;
        // 将后台返回的数据显示到页面中
        var ulDom = document.querySelector('ul')

        userList.forEach(function(user) {
          // 创建li标签
          var liDom = document.createElement('li');  // <li></li>
          // 向li标签中添加内容
          liDom.innerText = `${user.username}-----${user.password}----${user.phone}`
          ulDom.appendChild(liDom)
        })
      }
    }
    // 向服务器进行连接
    // 第一个参数表示请求方式, 第二个参数表示请求的路径
    xhr.open("get", "http://localhost:8080/user/list")
   
    // 向服务器发送请求
    xhr.send()

2.ajax简易封装

/**
 * 
 * option参数接收一个对象
 * 
 * option = {
 *  type:
 *  url:
 *  param:
 *  fn:
 * 
 * }
 * 
 * 
*/ 
function ajax(option){
    var xhr=new XMLHttpRequest();
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4){
             // 获取后台数据  // 登录成功   用户列表
            var res=JSON.parse(xhr.responseText)
             // 对后台数据做处理  // 弹框显示后台数据  将用户列表通过for循环生成标签显示到页面中 , 对后台数据进行处理的代码没有办法写死
            option.fn(res)
        }
    }

    option.type=option.type||'get';
    if(option.type=='get'){
        xhr.open(option.type,option.url+'?'+objToString(option.param)) // ``
        xhr.send()
    }else{
        xhr.open(option.type,option.url)
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
        xhr.send(objToString(option.param))
    }
}
// 将对象{username: 'zhangsan', password: '123456'}转换为字符串 : username=zhangsan&password=123456
function objToString(obj){
    var str="";
    for(key in obj){
        str+=`${key}=${obj[key]}&`
    }
    // 去掉最后多出来的那个 &
    str=str.slice(0,str.length-1)
    return str;
}

3.用户管理小案例

html页面

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
        <link rel="stylesheet" href="css/goods.css">
        <script src="js/ajax.js"></script>
        <script src="js/用户管理.js"></script>
    </head>
    <body>
        <div id="container">
            <div id="table-head">
                <button id="goods-add-btn">添加</button>
            </div>
            <table id="goods-list">
                <thead>
                    <tr>
                        <th>用户id</th>
                        <th>用户名</th>
                        <th>密码</th>
                        <th>手机号</th>
                        <th>邮箱</th>
                        <th>真实姓名</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <!-- <tr>
                        <td>1</td>
                        <td>zhangsan</td>
                        <td>111</td>
                        <td>186666666666</td>
                        <td>zhangsan@qq.com</td>
                        <td>张三</td>
                        <td>
                            <button class="btn-edit">编辑</button>
                            <button class="btn-del">删除</button>
                        </td>
                    </tr> -->
                   
                </tbody>                
            </table>

            
        </div>
        <div id="zhezhao">
            <div id="edit-pannel">
                <div id="edit-pannel-head">
                    <div id="pannel-title">添加用户</div>
                    <div id="pannel-close">X</div>
                </div>
                <input type="hidden"  id="userid" value=""/>
                <div id="edit-pannel-body">
                    <div class="form-item">
                        <label for="goodsid">用户名</label>
                        <input type="text"  id="username" value="" placeholder="请输入用户名" /><br />
                    </div>    
                    <div class="form-item">
                        <label for="goodsid">密&nbsp;&nbsp;&nbsp;&nbsp;码</label>
                        <input type="text"id="password" value="" placeholder="请输入密码" /><br />
                    </div> 
                    <div class="form-item">
                      <label for="goodsid">手机号</label>
                      <input type="text"  id="phone" value="" placeholder="请输入手机号" /><br />
                    </div> 
                    <div class="form-item">
                      <label for="goodsid">邮&nbsp;&nbsp;&nbsp;&nbsp;箱</label>
                      <input type="text"  id="email" value="" placeholder="请输入邮箱" /><br />
                    </div> 
                    <div class="form-item">
                      <label for="goodsid">姓&nbsp;&nbsp;&nbsp;&nbsp;名</label>
                      <input type="text"  id="name" value="" placeholder="请输入真实姓名" /><br />
                    </div>
                   
                </div>
                <div class="edit-pannel-footer">
                    <button id="btn-cancel">取消</button>
                    <button id="btn-submit">确定</button>
                </div>
            </div>
        </div>    
        
    </body>
</html>

js页面

onload=function(){
    //获取添加按钮
    var addBtn=document.querySelector("#goods-add-btn")
    addBtn.onclick=openDialog
    //获取弹框中的X,和取消按钮
    var pannelClose=document.querySelector("#pannel-close")
    var btnCancel=document.querySelector("#btn-cancel")
    pannelClose.onclick=btnCancel.onclick=closeDialog;
    //初始化用户列表
    initUserList()
    //获取弹框中的确定按钮标签,添加点击事件
    var btnSubmit=document.querySelector("#btn-submit")
    btnSubmit.onclick=addUser  //既能添加用户也能修改用户


}


//打开遮罩
function openDialog(){
    var zhezhao=document.querySelector("#zhezhao")
    zhezhao.style.display='block'
    document.querySelector("#pannel-title").innerText="添加用户"
}
//关闭遮罩
function closeDialog(){
    var zhezhao=document.querySelector("#zhezhao")
    zhezhao.style.display='none'
     // 将输入框的内容清空掉
  document.getElementById("username").value = '';
  document.getElementById("password").value = '';
  document.getElementById("phone").value = '';
  document.getElementById("email").value = '';
  document.getElementById("name").value = '';
}
//初始化用户列表
function initUserList(){
    //通过ajax获取用户列表
    ajax({
        url: "http://localhost:8080/user/list",
        fn:function(res){
            //对后台传递过来的数据进行处理
            console.log(res)
            var userList=res.rows
            // 通过对userList进行循环,创建表格的行,userList中有几个用户对象就循环多少次,
      var tbody = document.querySelector('#goods-list > tbody')
      // 先清空原来的用户列表
      tbody.innerHTML = "";

      userList.forEach(function(user) {
        // 创建一个tr标签
        var tr = document.createElement("tr")  // <tr></tr>
        tr.innerHTML = `
          <td>${user.userId}</td>
          <td>${user.username}</td>
          <td>${user.password}</td>
          <td>${user.phone}</td>
          <td>${user.email}</td>
          <td>${user.name}</td>
          <td>
              <button userid="${user.userId}" class="btn-edit">编辑</button>
              <button userid="${user.userId}" class="btn-del">删除</button>
          </td>
        
        `
        // 获取每一行的编辑和删除按钮, 给他们添加点击事件
        var editBtn = tr.querySelector('.btn-edit')
        var delBtn = tr.querySelector(".btn-del")

        editBtn.onclick = showEditDialog
        delBtn.onclick = delUser
        // 将tr追加到 tbody标签中
        tbody.appendChild(tr)

          })
        }
    })
}
//显示编辑弹框
function showEditDialog(){
    var zhezhao=document.querySelector("#zhezhao")
    zhezhao.style.display='block'
    document.querySelector("#pannel-title").innerText="编辑用户"
    //获取用户id(获取不符合w3c规范的)
    var userId=this.getAttribute("userid")
    //通过ajax获取要编辑的用户的对象
    ajax({
        url: `http://localhost:8080/user/${userId}`,
        fn: function(res) {
          // 将获取到的这个用户的数据设置到输入框中
          var user=res.data;
          document.getElementById("username").value = user.username;
          document.getElementById("password").value = user.password;
          document.getElementById("phone").value = user.phone;
          document.getElementById("email").value = user.email;
          document.getElementById("name").value = user.name;
		      //隐藏域userid的值
          var userid = document.getElementById("userid").value = user.userId;
        }
      })
      
}
//删除用户
function delUser(){
    //给反悔机会
    if(confirm("确定要删除这个用户吗?")){
        //获取要删除的用户的id
        var userId=this.getAttribute("userid")
        //通过ajax访问后台的删除用户功能
        ajax({
            type: "post",
            url: "http://localhost:8080/user/delete",
            param: {
              uids: userId
            },
            fn: function(res) {
              // 删除完数据之后的操作
              // 重新加载用户列表
              initUserList();
            }
          })
    }
}
//添加用户 修改用户也是这个方法
function addUser(){
    // 获取用户信息(输入框中的值)
  var username = document.getElementById("username").value;
  var password = document.getElementById("password").value;
  var phone = document.getElementById("phone").value;
  var email = document.getElementById("email").value;
  var name = document.getElementById("name").value;

  // 怎么判断添加用户还是修改用户,可以根据userid是否有值
  var userid = document.getElementById("userid").value;
  if(userid){//如果userid有值,说明是编辑用户
    // 通过ajax将用户信息发送到后台的添加用户的功能模块
  ajax({
    type: "post",
    url: "http://localhost:8080/user/edit",
    param: {
      userId:userid,
      username,
      password,
      phone,
      email,
      name
    },
    fn: function(res) {
      // 修改用户完成之后我们要做的事情
      // 1: 关闭弹框
      closeDialog()
      // 2: 重新加载用户列表, 也就是重新从后台查询一遍用户列表
      initUserList()
    }
  })

  }else{//userid没有值,添加用户
    // 通过ajax将用户信息发送到后台的添加用户的功能模块
  ajax({
    type: "post",
    url: "http://localhost:8080/user/add",
    param: {
      username,
      password,
      phone,
      email,
      name
    },
    fn: function(res) {
      // 添加用户完成之后我们要做的事情
      // 1: 关闭弹框
      closeDialog()
      // 2: 重新加载用户列表, 也就是重新从后台查询一遍用户列表
      initUserList()
    }
  })

  }
  
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值