首页 > 其他分享 >ajax

ajax

时间:2024-12-21 15:21:22浏览次数:4  
标签:name age json ajax result out

什么是ajax异步请求
同步请求的流程

而ajax响应的不在是地址或网页,而是一个数据。 在那里发送请求数据就响应到哪里。

ajax使用的场景



ajax不会刷新整个页面,只会更新页面的部分内容。ajax服务器返回的是数据。而不是页面了。

了解: js+html+css+servlet
ajax异步请求的流程

什么是同步和异步


效率高。网络发达---访问量增加。
如何完成ajax异步请求。

  1. 可以自己写js代码完成----复杂度太高。
  2. 借助第三方封装的插件。----jquery插件。---axios插件

    引入jquery插件
    <%--引入jquery插件文件 src:jquery文件所在的路径--%>
    <script type="text/javascript" src="/js/jquery.min.js"></script>

触发事件函数

<%--onclick:点击事件。--%>
<button onclick="aaa()">点击</button>
 <script>
      //自定义函数
      function aaa(){
            //通过ajax发送异步请求。
     //$.get(url,data,fn)
     //url:请求服务器的地址  data:请求服务器携带的数据   fn:服务器响应后触发的函数
            $.get("/HelloServlet",{"name":"刘德华","age":18},function(result){//服务器响应后触发该函数,并把服务器响应的数据传递给result变量。
                    alert(result);//弹出服务器响应的数据
            })
      }
    </script>

HelloServlet

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String name = req.getParameter("name");
        String age = req.getParameter("age");
        System.out.println("name===="+name+";age====="+age);

        PrintWriter out = resp.getWriter();//获取输出对象
        out.print("hello world"); //响应ajax数据

        out.flush();//刷新out对象
        out.close();//关闭out对象。
    }
}

案例
注册时,判断当前注册的账号是否可用。

<%--
  Created by IntelliJ IDEA.
  User: ldh
  Date: 2024/9/25
  Time: 10:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
  <script type="text/javascript" src="/js/jquery.min.js"></script>
  <script>
     function checkName(){
          //获取输入框对象
          var inputName = document.getElementById("uname");
          //获取输入框的值
          var name=inputName.value;
          $.get("/AjaxServlet",{"name":name},function(result){
               //根据id查询span标签
               var elementById = document.getElementById("msg");
               //显示在该标签内
              elementById.innerHTML=result;
          })
     }
  </script>
</head>
<body>
    <form action="" method="post">
      <%--onblur:失焦事件--%>
        账号:<input type="text" name="uname" id="uname" onblur="checkName()"/><span id="msg"></span><br>
        密码:<input type="password" name="upwd"/><br>
      <input type="submit" value="立即注册"/>
    </form>
</body>
</html>

Servlet

@WebServlet("/AjaxServlet")
public class AjaxServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8"); //请求的编码
        resp.setCharacterEncoding("utf-8");//响应编码
        String name = req.getParameter("name");
        PrintWriter out = resp.getWriter();
        //判断该账号是否在数据库存在
        if("admin".equals(name)){
            out.println("<font color='red'>该账号已存在,请换个账号。</font>");
        }else{
            out.println("<font color='green'>该账号可用</font>");
        }
        out.flush();
        out.close();
    }
}

响应的数据类型
我们刚才服务响应的内容都是文本内容。我们服务器可以响应如下的数据类型。

  1. 文本类型----默认ajax处理的就是文本类型。
  2. json数据类型----重点【响应json类型】
  3. xml数据类型。-- 人工智能才会返回这种数据。
<?xml version="1.0" encoding="UTF-8"?>
<name>张三</name>
<age>19</age>

json数据

JSON(JavaScript Object  Notation)一种简单的数据格式,比xml更轻巧。JSON
是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。 
JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。
//json对象
{"key":value,"key":value...}

//json对象集合
[
  {"key":value,"key":value...},
  {"key":value,"key":value...},
  ....
]


 规则如下:
       1)映射用冒号(“:”)表示。名称:值
       2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
       3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
       4) 并列数据的集合(数组)用方括号(“[]”)表示。
         [
           {名称1:值,名称2:值2},
           {名称1:值,名称2:值2}
         ]
      5  元素值可具有的类型:string, number, object, array, true, false, null 
      6. 调用json对象中数据: 对象名.key
  <script>
      //{开始 }结尾    key必须使用""括起来。 value如果是字符串”“,如果是整形,则不用”“。
      var p={"name":"张三","age":19} //json对象
      // alert(p.name)
      //json对象集合
      var ps=[
          {"name":"张三","age":19},
          {"name":"李四","age":20},
          {"name":"王五","age":21}
      ]
      //显示json对象集合的name
      for(var i=0;i<ps.length;i++){
          alert(ps[i].name+"------------>"+ps[i].age)
      }
  </script>

如何让服务器响应这种数据
前端

后端

使用封装的jar完成json的
第三方公司就封装一个jar。该jar中提供了很多类完成java转换成json对象。

 public static void main(String[] args) {
        User user=new User("闫",19);
        String s = JSON.toJSONString(user);//把一个java对象转换为json对象
        System.out.println(s); //版本太高

        List<User> list=new ArrayList<>();
        list.add(new User("李",18));
        list.add(new User("戴",18));
        list.add(new User("左",18));  //[{"name":"李","age":18},{},{}]

        String s1 = JSON.toJSONString(list);
        System.out.println(s1);


    }

综合案例
Ajax请求所有用户数据,把服务器响应的数据以表格的形式展示

<%--
  Created by IntelliJ IDEA.
  User: ldh
  Date: 2024/9/25
  Time: 15:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
</head>
<%--onload:表示页面加载完毕后执行的js函数. onclick点击事件  onblur失焦事件  onl oad页面加载事件--%>
<body onl oad="loadUser()">

<table border="1" cellspacing="0" cellpadding="0" width="500" align="center" >
    <tr>
        <th>编号</th>
        <th>账号</th>
        <th>密码</th>
        <th>姓名</th>
        <th>操作</th>
    </tr>
    <tbody id="userTable">

    </tbody>
</table>
</body>
<script>
    function loadUser() {
        // 使用jQuery的get方法发送GET请求到"/UserServlet",回调函数处理返回的结果
        $.get("/UserServlet", function (result) {
            // 获取页面上id为"userTable"的表格元素
            var userTable = document.getElementById("userTable");
            // 用于动态生成表格内容的字符串变量
            var str = "";
            // 遍历结果集,生成表格的每一行内容
            for (let i = 0; i < result.length; i++) {
                // 开始拼接一个表格行
                str += "<tr>";
                // 拼接用户ID单元格
                str += "<td>" + result[i].id + "</td>";
                // 拼接用户名单元格
                str += "<td>" + result[i].username + "</td>";
                // 拼接用户密码单元格
                str += "<td>" + result[i].password + "</td>";
                // 拼接用户真实姓名单元格
                str += "<td>" + result[i].realname + "</td>";
                // 拼接包含删除按钮的单元格
                str += "<td><button onclick=''>删除</button></td>";
                // 完成一个表格行的拼接
                str += "</tr>";
            }
            // 将拼接好的字符串设置为表格的innerHTML,动态更新表格内容
            userTable.innerHTML=str;
        }, "json"); // 指定返回数据类型为json
    }
</script>
</html>

UserServlet

  private void selectAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<User> users = userDao.selectAll();//获取数据库中所有的用户
        //把java集合对象转换为json集合对象
        String json = JSON.toJSONString(users);
        //获取输出对象
        PrintWriter out = resp.getWriter();
        out.println(json);

        //刷新输出对象
        out.flush();
        //关闭输出对象
        out.close();
    }

标签:name,age,json,ajax,result,out
From: https://www.cnblogs.com/xiaomubupi/p/18620787

相关文章

  • 跨域资源访问:JSONP、CORS、代理服务器,油猴脚本ajax
    跨域资源访问主要有:JSONP,CORS,反向代理解决:两个不同域名之间相互访问,但拥有同源策略的限制(两个URL的protocol、port和host都相同的话)。跨源资源共享(CORS)客户端和服务器之间的简单交换,使用CORS标头字段来处理权限1.简单请求比如说,假如站点 https://foo.example 的......
  • JavaWeb-2 Ajax以JSON格式访问Servlet
    1.客户端代码1<!DOCTYPEhtml>2<html>3<head>4<metacharset="UTF-8">5<title>Bootstrap实例-水平表单</title>6<linkrel="stylesheet"type="text/css"href="./css/boo......
  • Java Web 开发学习中:过滤器与 Ajax 异步请求
    一、过滤器Filter:过滤器的概念与用途在一个庞大的Web应用中,有许多资源需要受到保护或进行特定的预处理。过滤器就像是一位智能的守卫,站在资源的入口处,根据预先设定的规则,决定哪些请求可以顺利访问资源,哪些请求需要被拦截或进行特殊处理。比如,在众多页面中,判断用户是否登录......
  • Ajax异步刷新功能及简单案例例子解析
    代码示例:Ajax异步刷新功能允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。这种技术可以显著提升用户体验和页面性能。以下是Ajax异步刷新功能的一个简单案例:原生JS实现Ajax异步刷新创建XMLHttpRequest对象:varxhr=newXMLHttpRequest();......
  • Ajax实现异步加载数据例子解析
    代码示例:Ajax(AsynchronousJavaScriptandXML)是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。下面我将提供一个详细的Ajax实现异步加载数据的例子。1.HTML部分首先,我们需要一个简单的H......
  • 说说防止重复发送ajax请求的方法有哪些?各自有什么优缺点?
    防止重复发送AJAX请求是前端开发中一个常见的问题,尤其是在网络延迟较高或用户操作频繁的情况下。以下是一些常用的方法,以及它们的优缺点:1.禁用提交按钮:方法:在AJAX请求发送后,立即禁用提交按钮,并在请求完成后重新启用。优点:简单易实现,可以有效防止用户在请求处理期间......
  • ajax如何接收后台传来的图片?
    前端Ajax接收后端传来的图片,主要取决于后端如何发送图片数据。以下几种常见方式以及对应的Ajax接收方法:1.Base64编码字符串:后端:将图片转换成Base64编码的字符串,通过JSON格式返回给前端。前端:Ajax接收JSON数据,提取Base64字符串,然后将其设置为img元素的......
  • AJAX笔记-day04(概念)
    一、了解同源策略和跨域两个页面的协议,域名和端口都相同例如,下表给出了相对于http://www.test.com/index.html页面的同源检测:URL是否同源原因http://www.test.com/other.html是同源(协议、域名、端口相同)https://www.test.com/about.html否协议不同(http......
  • AJAX笔记-day03
    一、XMLHttpRequest的基本使用XMLHttpRequest(简称xhr)是浏览器提供的Javascript对象,通过它,可以请求服务器上的数据资源。之前所学的jQuery中的Ajax函数,就是基于xhr对象封装出来的。1.使用xhr发起GET请求步骤:①创建 xhr 对象②调用 xhr.open......
  • 实现一个ajax的队列请求
    classAjaxQueue{constructor(){this.queue=[];this.isRunning=false;}add(request){this.queue.push(request);this.run();}run(){if(this.isRunning||this.queue.length===0){return;}this.isRu......