首页 > 其他分享 >将ajax请求封装到jQuery库当中

将ajax请求封装到jQuery库当中

时间:2023-05-29 14:00:51浏览次数:32  
标签:jQuery function 封装 domObj selector ajax jsonArgs

1. 手动把ajax封装到js库  28

代码在com.bjpowernode.ajax.servlet

AjaxRequest10Servlet

package com.bjpowernode.ajax.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

//将ajax代码进行封装,封装到jQuery库当中  28

@WebServlet("/ajaxrequest10")
public class AjaxRequest10Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        String username = request.getParameter("username");
        //{"uname" : "zhangsan"}
        //响应一个json格式的字符串
        response.getWriter().print("{\"uname\" : \""+username+"\"}");
    }
}

E:\java学习\Ajax\course\course8\web

ajax11.html
<!--将ajax代码进行封装,封装到jQuery库当中  28-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>将ajax代码进行封装,封装到jQuery库当中</title>
</head>
<body>
<!--导入js库-->
<script type="text/javascript" src="/ajax/js/jQuery-1.0.0.js"></script>

<script type="text/javascript">
    window.onload = function (){
        document.getElementById("btn").onclick = function (){
            /*var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function (){
                if(this.readyState==4){
                    if(this.status==200){
                        // 我们这个工具类在封装的时候,先不考虑那么多,假设服务器返回的都是json格式的字符串。
                        var jsonObj = JSON.parse(this.responseText);
                        // 返回的json格式的数据:{"uname" : "zhangsan"}
                        document.getElementById("mydiv").innerHTML = jsonObj.uname
                    }
                }
            }
            xhr.open("POST","/ajax/ajaxrequest10",true)
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
            var username = document.getElementById("username").value
            xhr.send("username="+username)*/

            var username = document.getElementById("username").value
            // 调用jQuery的工具类中的ajax方法来发送ajax请求
            $.ajax({
                type : "POST",
                url : "/ajax/ajaxrequest10",
                data : "username="+username,
                async : true,
                // 程序响应回来之后,对于客户端来说要拿到响应的数据,然后解析这个数据,展示到页面上。
                success : function (json){
                    document.getElementById("mydiv").innerHTML = json.uname
                }
            })

        }
    }
</script>

<button id="btn">发送ajax请求</button><br>
用户名:<input type="text" id="username"><br>
<div id="mydiv"></div>

</body>
</html>

E:\java学习\Ajax\course\course8\web\js

js库 jQuery-1.0.0.js
// 将jQuery单独写到js文件中使用是引入库  27

/*封装一个函数,通过这个函数可以获取到html页面中的节点,这个函数我给他起一个名字,叫做:jQuery*/
/*要封装的代码是:根据id来获取元素。document.getElementById("btn")*/
/*设计思路来自于CSS的语法。 #id 可以获取到这个元素 */
//下面这段代码是进行封装
function jQuery(selector){

    //根据id获取元素  22
    if(typeof selector=="string"){
        // selector可能是#id,也可以能是其他的选择器,例如类选择器:.class
        if(selector.charAt(0)=="#"){//解释这个selector就是一个变量,#号是封装的线索(也就是传过来的必须是以#号开头)
            //selector是一个id选择器
            //selector.substring(1)解释,利用substring截取字符串函数将传来的#id,截取留下id
            //var domObj = document.getElementById(selector.substring(1));
            //注意如果不写var domObj就是一个全局变量   25
            domObj = document.getElementById(selector.substring(1));
            //返回domObj
            //return domObj

            //返回jQuery对象
            return new jQuery()
        }
    }

    //页面加载完毕后注册回调函数   23
    //typeof是判断参数的类型这里的typeof selector=="function"是判断类型是不是函数
    if(typeof selector=="function"){
        window.onload = selector
    }

    //定义一个html()函数,代替:domObj.innerHTML = ""  25
    this.html = function (htmlStr){
        //domObj全局变量
        domObj.innerHTML = htmlStr
    }

    //定义一个click()函数,代替:domObj.onclick = function(){}  25
    this.click = function (fun){
        domObj.onclick = fun
    }

    //还可以封装很多事件   25
    this.focus = function (fun){
        domObj.onfocus = fun
    }

    this.blur = function(fun) {
        domObj.onblur = fun
    }

    this.change = function (fun){
        domObj.onchange = fun
    }
    // ....

    //封装获取文本框中的用户名的value函数 ,代替domObj.value  26
    this.val = function (v){
        if(v==undefined){//如果没传参,就返回文本框的输入的
            return domObj.value
        }else{//传参了,姐把参数赋值
            domObj.value = v
        }

    }

    //定义一个静态的方法发送ajax请求   28
    /**
     * 分析:使用ajax函数发送ajax请求的时候,需要程序员给我们传过来什么?
     *      请求的方式(type):GET/POST
     *      请求的URL(url):url
     *      请求时提交的数据(data):data
     *      请求时发送异步请求还是同步请求(async):true表示异步,false表示同步。
     */
    jQuery.ajax = function (jsonArgs){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (){
            if(this.readyState==4){
                if(this.status==200){
                    // 我们这个工具类在封装的时候,先不考虑那么多,假设服务器返回的都是json格式的字符串。
                    var jsonObj = JSON.parse(this.responseText);
                    //调用函数
                    jsonArgs.success(jsonObj)
                }
            }
        }

        if(jsonArgs.type.toUpperCase()=="POST"){
            xhr.open("POST",jsonArgs.url,jsonArgs.async)
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
            xhr.send(jsonArgs.data)
        }

        if(jsonArgs.type.toUpperCase()=="GET"){
            xhr.open("GET",jsonArgs.url+"?"+jsonArgs.data,jsonArgs.async)
            xhr.send()
        }


    }

}

//但是我们嫌jQuery太长,就将jQuery赋值给$符号
$ = jQuery
new jQuery()//这里new一下这个类,是为了保证静态的方法能被调用

2. 全方位测试我们自己开发的jQuery库  29

com.bjpowernode.ajax.servlet

AjaxRequest11Servlet

package com.bjpowernode.ajax.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Locale;

//测试我们自己写的jQuery库  29
@WebServlet("/ajaxrequest11")
public class AjaxRequest11Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        String username = request.getParameter("username");
        //{"uname" : "zhangsan"}
        //响应一个json格式的字符串
        response.getWriter().print("{\"uname\" : \""+username.toUpperCase()+"\"}");
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        String username = request.getParameter("username");
        //{"uname" : "zhangsan"}
        //响应一个json格式的字符串
        response.getWriter().print("{\"uname\" : \""+username.toLowerCase()+"\"}");
    }
}

E:\java学习\Ajax\course\course8\web

ajax12.html

<!--全方位的测试jQuery库  29-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全方位的测试jQuery库</title>
</head>
<body>
<!--引入自己写的jQuery库-->
<script type="text/javascript" src="/ajax/js/jQuery-1.0.0.js"></script>
<script type="text/javascript">
    $(function (){
        $("#btn").click(function (){
            //发送ajax请求
            $.ajax({
                //type : "GET",
                type : "POST",
                url : "/ajax/ajaxrequest11",
                data : "username="+ $("#username").val(),
                async : true,
                success : function (json){
                    $("#div1").html(json.uname)
                }
            })
        })
    })
</script>
<button id="btn">发送ajax get请求</button><br>
用户名:<input type="text" id="username"><br>
<div id="div1"></div>

</body>
</html>

E:\java学习\Ajax\course\course8\web\js

js库 jQuery-1.0.0.js

// 将jQuery单独写到js文件中使用是引入库  27

/*封装一个函数,通过这个函数可以获取到html页面中的节点,这个函数我给他起一个名字,叫做:jQuery*/
/*要封装的代码是:根据id来获取元素。document.getElementById("btn")*/
/*设计思路来自于CSS的语法。 #id 可以获取到这个元素 */
//下面这段代码是进行封装
function jQuery(selector){

    //根据id获取元素  22
    if(typeof selector=="string"){
        // selector可能是#id,也可以能是其他的选择器,例如类选择器:.class
        if(selector.charAt(0)=="#"){//解释这个selector就是一个变量,#号是封装的线索(也就是传过来的必须是以#号开头)
            //selector是一个id选择器
            //selector.substring(1)解释,利用substring截取字符串函数将传来的#id,截取留下id
            //var domObj = document.getElementById(selector.substring(1));
            //注意如果不写var domObj就是一个全局变量   25
            domObj = document.getElementById(selector.substring(1));
            //返回domObj
            //return domObj

            //返回jQuery对象
            return new jQuery()
        }
    }

    //页面加载完毕后注册回调函数   23
    //typeof是判断参数的类型这里的typeof selector=="function"是判断类型是不是函数
    if(typeof selector=="function"){
        window.onload = selector
    }

    //定义一个html()函数,代替:domObj.innerHTML = ""  25
    this.html = function (htmlStr){
        //domObj全局变量
        domObj.innerHTML = htmlStr
    }

    //定义一个click()函数,代替:domObj.onclick = function(){}  25
    this.click = function (fun){
        domObj.onclick = fun
    }

    //还可以封装很多事件   25
    this.focus = function (fun){
        domObj.onfocus = fun
    }

    this.blur = function(fun) {
        domObj.onblur = fun
    }

    this.change = function (fun){
        domObj.onchange = fun
    }
    // ....

    //封装获取文本框中的用户名的value函数 ,代替domObj.value  26
    this.val = function (v){
        if(v==undefined){//如果没传参,就返回文本框的输入的
            return domObj.value
        }else{//传参了,姐把参数赋值
            domObj.value = v
        }

    }

    //定义一个静态的方法发送ajax请求   28
    /**
     * 分析:使用ajax函数发送ajax请求的时候,需要程序员给我们传过来什么?
     *      请求的方式(type):GET/POST
     *      请求的URL(url):url
     *      请求时提交的数据(data):data
     *      请求时发送异步请求还是同步请求(async):true表示异步,false表示同步。
     */
    jQuery.ajax = function (jsonArgs){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (){
            if(this.readyState==4){
                if(this.status==200){
                    // 我们这个工具类在封装的时候,先不考虑那么多,假设服务器返回的都是json格式的字符串。
                    var jsonObj = JSON.parse(this.responseText);
                    //调用函数
                    jsonArgs.success(jsonObj)
                }
            }
        }

        if(jsonArgs.type.toUpperCase()=="POST"){
            xhr.open("POST",jsonArgs.url,jsonArgs.async)
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
            xhr.send(jsonArgs.data)
        }

        if(jsonArgs.type.toUpperCase()=="GET"){
            xhr.open("GET",jsonArgs.url+"?"+jsonArgs.data,jsonArgs.async)
            xhr.send()
        }


    }

}

//但是我们嫌jQuery太长,就将jQuery赋值给$符号
$ = jQuery
new jQuery()//这里new一下这个类,是为了保证静态的方法能被调用

标签:jQuery,function,封装,domObj,selector,ajax,jsonArgs
From: https://blog.51cto.com/u_15784725/6370474

相关文章

  • vue-封装组件-超出部分限制...,并且提示
    显示效果 代码:<template><divclass="tip"><el-tooltip:content="content"placement="top"width="400":disabled="!isShowTooltip"><spanclass="me......
  • jQuery库的初次封装
    1.  AJAX代码封装  22-26- AJAX请求相关的代码都是类似的,有很多重复的代码,这些重复的代码能不能不写,能不能封装一个工具类。要发送ajax请求的话,就直接调用这个工具类中的相关函数即可。- 接下来,手动封装一个工具类,这个工具类我们可以把它看做是一个JS的库。我们把这个JS库起......
  • 简单商品后台管理系统-应用MVC和AJAX,使用Bootstrap
    一个商品后台管理系统-应用了MVC三层设计模式以及AJAX技术,使用Bootstrap模板;是我用于练习Ajax的增删改查写的一个小系统,很简易,但是有助于理解mvc设计模式,并且简单条理清晰使得它是一个好的练习项目;效果展示: 代码部分:index.html<html><head><title>管理系统</titl......
  • JQuery的认识和安装
    jQuery是一个JavaScript函数库。jQuery是一个轻量级的"写的少,做的多"的JavaScript库。jQuery库包含以下功能:HTML元素选取HTML元素操作CSS操作HTML事件函数JavaScript特效和动画HTMLDOM遍历和修改AJAXUtilities提示: 除此之外,jQuery还提供了大量的插......
  • 封装 JDBCUtils和事务
    1. JDBC 的相关 API 小结  8322. 封装 JDBCUtils 【关闭连接, 得到连接】  8332.1 说明在jdbc操作中,获取连接和释放资源是经常使用到可以将其封装JDBC连接的具类JDBCUtils2.2 代码实现实际使用使用工具类 JDBCUtils代码在com.stulzl.utils.JDBCUtils      833......
  • ajax乱码问题和异步同步问题
    1. 测试内容: 201.1 发送ajax get请求    发送数据到服务器,服务器获取的数据是否乱码?    - 服务器响应给前端的中文,会不会乱码?1.2 发送ajax post请求    - 发送数据到服务器,服务器获取的数据是否乱码?    - 服务器响应给前端的中文,会不会乱码?1.3 包括还要......
  • ajax技术学习
    ajax处理异步请求,刷新部分网页,不会将整个页面重新加载,左侧文本框输入数据,输入完成后实时显示在同业页面另一侧就用到了这个技术<scripttype="text/javascript">$(function(){//绑定键盘输入事件$('input').keyup(function(){//构造参数......
  • ASEMI代理韩景元可控硅C106M参数,C106M封装,C106M尺寸
    编辑-Z韩景元可控硅C106M参数:型号:C106M断态重复峰值电压VDRM:600V通态电流IT(RMS):4A通态浪涌电流ITSM:30A平均栅极功耗PG(AV):0.2W峰值门功率耗散PGM:1W工作接点温度Tj:-40~125℃储存温度TSTG:-40~150℃断态重复峰值电流IDRM:≤5uA重复峰值反向电流IRRM:≤5uA栅极非触发电压VGD:≥0.2V C106......
  • Django——AJAX
    AJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步的Javascript和XML”。AJAX不是新的编程语言,而是一种使用现有标准的新方法。使用Javascript语言与服务器进行异步交互的,并进行局部刷新。传输的数据为XML(当然,传输的数据不只是XML)AJAX最大的优点是在不重新加载整个......
  • 这段代码会抛出NPE,你造吗?----封装AssertUtil来友好地利用断言
    运行下面代码,会抛出NPE。你知道为什么吗?importcn.hutool.core.lang.Assert;publicclassTestMain{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();Assert.isTrue(myClass.myProperty==0);}privatestati......