JavaWeb AJAX和JSON详解详解详解

目录

1.什么是AJAX?

2.同步交互和异步交互

3.AJAX的优缺点

4.AJAX典型应用场景:                         

案例:重命名校验:

5. JQuery 中 AJAX的应用

6.JSON数据的传输        

1.把java转换为json

2.json-lib核心jar包

3.json-lib核心类

1.JSONObject

-把一个对象转换成json对象(obj对象)

 - 原生生成json对象的格式

  2.JSONArray

通过原生生成json数组格式

list->json数组 

  arrat->json数组


1.什么是AJAX?

AJAX:(Asynchronous Javascript And XML) 翻译成中文就是“异步JavaScript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,也可以是json格式数据)。


2.同步交互和异步交互

同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求。
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。


3.AJAX的优缺点

AJAX还有一个最大的特点

当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新。这一特点给用户的感受是在不知不觉中完成请求和响应过程。


异步交互:与服务器异步交互。

局部刷新:浏览器页面局部刷新。

优点:

  1. AJAX使用Javascript技术向服务器发送异步请求,为浏览器异步请求提供了一种便捷的方式。
  2. AJAX无须刷新整个页面,使得局部刷新成为可能。
  3.  因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX加载性能高一些。


缺点:

  1.  AJAX并不适合所有场景,很多时候还是要使用同步交互。例如短信验证码的场景
  2.  AJAX虽然提高了用户体验,但无形中向服务器发送的请求次数增多了,导致服务器压力增大
  3.  因为AJAX是在浏览器中使用Javascript技术完成的,所以还需要处理浏览器兼容性问题
  4.  AJAX破坏了浏览器的一些机制,例如历史记录机制,浏览器的回退按钮不再起主要作用。

4.AJAX典型应用场景:                
         

   1、当我们在百度搜索中填写一个“Java”关键字时,会出现一个下拉列表,提供一些可选项;我们接着输入“学习”关键字,下拉列表会动态发生变化,提供“Java学习”的一些可选项,这里就使用了AJAX技术。
         当文件框发生了输入变化时,浏览器会使用AJAX技术向服务器发送一个请求,查询包含“Java”关键字字的选项,然后服务器会把查询到的结果响应给浏览器,最后浏览器把这些选项显示在下拉列表中。整个过程中页面没有整体刷新,只是刷新了页面中的局部内容而已!当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应。


     2、用户注册重名性校验,当输入注册用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为“zhangSan”的用户是否存在,最终服务器返回true表示名为zhangSan的用户已经存在了,浏览器在得到结果后显示“用户名已被注册!”。整个过程中页面没有整体刷新,只是刷新了页面中的局部内容而已!当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应。

案例:重命名校验:

1.创建一个maven项目

2.WebApp层,创建一个ajaxRename.jsp

这个页面要写页面展示的简易登录,并且有一个鼠标不聚焦除法方法---发送请求

<body>中

<body>
    用户名:<input type="text" id="username" onblur="checkUsername()"><br/>
    年龄:<input type="text" id="age">
</body>

<script>中:

<script> 
function checkUsername() {
        //   访问后台
        //获取表单元素
        const username = document.getElementById("username");
        //   发送请求
            $.ajax({
                type:'get',
                url:'${pageContext.request.contextPath}/user?username='+username,
                success:function (data) {
                    console.log("success.." + data)

                    if (data == 'yes') {

                        alert("用户名重复")
                    }else {
                        alert("该用户名可用")
                    }

                },
                error:function () {//后台发生异常的时候执行回调
                    alert("fail...");
                }
            })
            alert(11111)
        }
</script>

完整jsp页面代码:

<%--
  Created by IntelliJ IDEA.
  User: Chenhh
  Date: 2024/4/25
  Time: 20:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>重名检验</title>
<%--    引入脚本--%>
    <script type="application/javascript" src="js/jquery-3.7.1.js"></script>
<script>
        function checkUsername() {
     
          
         const username = document.getElementById("username");
        //   发
            $.ajax({
                type:'get',
                url:'${pageContext.request.contextPath}/user?username='+username,
                success:function (data) {
                    console.log("success.." + data)

                    if (data == 'yes') {

                        alert("用户名重复")
                    }else {
                        alert("该用户名可用")
                    }

                },
                error:function () {//后台发生异常的时候执行回调
                    alert("fail...");
                }
            })
            alert(11111)
        }
    </script>
</head>
<body>
    用户名:<input type="text" id="username" onblur="checkUsername()"><br/>
    年龄:<input type="text" id="age">
</body>
</html>

 在java包下创建目录controller层,并创建一个新servlet类(注解方式)

这里不连接数据库,模拟用户名是否与'admin'相同.


@WebServlet(name="UserServlet",value="/user")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
//        接收请求栏中的参数,也就是获取页面表单中输进去的值
        String username = request.getParameter("username");
        //模拟判断是否重名
        if(username.equals("admin")){
//            注意,这里的值会传入到jsp页面中的data形参中
            response.getWriter().write("yes");
        }else{
            response.getWriter().write("no");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

5. JQuery 中 AJAX的应用

jQuery函数库能够简化JavaScript的开发,它同样提供了对JavaScript AJAX的简化办法。
我们常用的jQuery AJAX方法有:

  • $.ajax()
  • $.get()
  • $.post()

主要介绍$.ajax()的使用

ajax() 方法用于执行 AJAX(异步 HTTP)请求,$.get()与$.post()只是基于$.ajax()的再封装。

$.ajax()的语法格式如下:
 $.ajax({name:value, name:value, ... })

$.ajax()中可选的常用键值对如下:

  • async:布尔值,表示请求是否异步处理。默认是 true。
  • data:规定要发送到服务器的数据。
  • error(xhr,status,error):如果请求失败要运行的函数,提供三个可选的形参,xhr代表XMLHttpRequest对象,status代表错误状态500、404等错误状态码,error代表输出的错误信息。
  • success(result,status,xhr):当请求成功时运行的函数。_xhr代表XMLHttpRequest对象,status代表成功状态200、300等状态码,_result代表返回值数据。
  • type:规定请求的类型(GET 或 POST),默认为get。
  • url:规定发送请求的 URL。

6.JSON数据的传输        

        在上述AJAX的介绍中,我们只是利用response.getWriter().print()方法进行简单数据的输出,这其实并不是我们使用AJAX的初衷,我们使用AJAX是为了更加强大的数据获取与处理,而在JS中,对于数据的处理往往采用JSON格式。因此,我们在Java服务端输出地数据也要转换为JSON格式。

1.把java转换为json

apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串,也可以把JavaBean转换成JSON字符串。

2.json-lib核心jar包

json-lib核心jar包:
                    json-lib.jar
json-lib的依赖jar包有:
                    commons-lang.jar
                    commons-beanutils.jar
                    commons-logging.jar
                    commons-collections.jar
                    ezmorph.jar

3.json-lib核心类

1.JSONObject

-把一个对象转换成json对象(obj对象)
User user = new User(); 
user.setId(1); user.setUsername("clh"); 
user.setAge(19); 
user.setAddress("运城"); 
JSONObject jo = JSONObject.fromObject(user);
 System.out.println(jo.toString());

   -map转换成json对象

Map map = new HashMap<>();
map.put("1","陈林恒");
map.put("2","李四");
map.put("3","王五");
JSONObject jo2 = JSONObject.fromObject(map);
System.out.println(jo2.toString());
 - 原生生成json对象的格式
  2.JSONArray
通过原生生成json数组格式
JSONArray ja = new JSONArray();
ja.add("张三");
ja.add(20);
System.out.println(ja.toString());//["张三",20]
list->json数组 
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
JSONArray ja2 = JSONArray.fromObject(list);
System.out.println(ja2.toString());
  arrat->json数组
String[] arr = {"ccc","ddd"};
JSONArray ja3 = JSONArray.fromObject(arr);
System.out.println(ja3.toString());

   
   

谢谢你的点赞收藏~

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值