• AJAX学习笔记3练习


    AJAX学习笔记2发送Post请求_biubiubiu0706的博客-CSDN博客

    1.验证用户名是否可用

    需求,用户输入用户名,失去焦点-->onblur失去焦点事件,发送AJAX POST请求,验证用户名是否可用

    新建表

    前端页面

    WEB-INF下新建lib包引入依赖,要用JDBC

    后端代码

    1. package com.web;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.*;
    10. /**
    11. * @author hrui
    12. * @date 2023/9/3 22:11
    13. */
    14. @WebServlet("/checkusername")
    15. public class AjaxRequestCheckName extends HttpServlet {
    16. @Override
    17. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    18. //获取用户名
    19. String username = req.getParameter("username");
    20. //打布尔标记(一种编程模型)
    21. boolean flag=false;
    22. //连接数据库校验用户名是否存在
    23. Connection conn=null;
    24. PreparedStatement ps=null;
    25. ResultSet rs=null;
    26. //1.注册驱动
    27. //System.setProperty("jdbc.drivers","com.mysql.cj.jdbc.Driver");
    28. try {
    29. Class.forName("com.mysql.cj.jdbc.Driver");
    30. //2.获取连接
    31. conn= DriverManager.getConnection("xxx", "xxx", "xxx");
    32. //3.获取执行对象
    33. String sql="select id,name from t_user where name=?";
    34. ps = conn.prepareStatement(sql);
    35. ps.setString(1, username);
    36. //4.执行sql
    37. rs = ps.executeQuery();
    38. //5.处理结果集
    39. if(rs.next()){//如果只有一条的情况
    40. //用户名存在
    41. flag=true;
    42. }
    43. } catch (Exception e) {
    44. e.printStackTrace();
    45. }finally {
    46. if(rs!=null){
    47. try {
    48. rs.close();
    49. } catch (SQLException e) {
    50. e.printStackTrace();
    51. }
    52. }
    53. if(ps!=null){
    54. try {
    55. ps.close();
    56. } catch (SQLException e) {
    57. e.printStackTrace();
    58. }
    59. }
    60. if(conn!=null){
    61. try {
    62. conn.close();
    63. } catch (SQLException e) {
    64. e.printStackTrace();
    65. }
    66. }
    67. }
    68. //响应结果到浏览器
    69. resp.setContentType("text/html;charset=utf-8");
    70. PrintWriter writer = resp.getWriter();
    71. if(flag){
    72. writer.print("用户名存在,不可用");
    73. }else{
    74. writer.print("用户名可用");
    75. }
    76. }
    77. public static void main(String[] args) {
    78. try {
    79. //Class.forName("com.mysql.cj.jdbc.Driver");
    80. Connection conn= DriverManager.getConnection("xxx", "xxx", "xxx");
    81. System.out.println(conn);
    82. } catch (Exception e) {
    83. e.printStackTrace();
    84. }
    85. }
    86. }

    还可以在input获得焦点时候对

    其实和input里面直接写  οnfοcus="xxx方法"  一样

    2.用户点击按钮,发送AJAX请求  显示学院列表

    测试

    现在这种情况存在的问题是是后端代码又开始拼接HTML

    能不能直接返回数据,剩下让前端处理   可以返回JSON  或者 XML

    返回JSON数据

    回顾JSON

    也可以是这样

    测试

    上面是在JS代码中创建JSON对象,数组的访问

    但是在后端返回前端时候,永远返回的都是字符串--->如何将JSON字符串转换为JSON对象呢

    测试

    下面后端就用JSON格式字符串的方式返回数据

    下面去连接下数据库

    前端

    后端

    1. package com.web;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.io.PrintWriter;
    9. import java.sql.*;
    10. /**
    11. * @author hrui
    12. * @date 2023/9/3 23:57
    13. */
    14. @WebServlet("/studys")
    15. public class AjaxRequestStudys extends HttpServlet {
    16. @Override
    17. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    18. //连接数据库,查询学院
    19. resp.setContentType("text/html;charset=utf-8");
    20. PrintWriter writer = resp.getWriter();
    21. StringBuilder builder=new StringBuilder();
    22. String jsonStr="";
    23. // builder.append("");
    24. // builder.append("1");
    25. // builder.append("张三");
    26. // builder.append("20");
    27. // builder.append("北京大兴区");
    28. // builder.append("");
    29. // builder.append("");
    30. // builder.append("2");
    31. // builder.append("李四");
    32. // builder.append("22");
    33. // builder.append("北京海淀区");
    34. // builder.append("");
    35. //拼接一个JSON数组回去
    36. //builder.append("[");
    37. //''单引号也不行 前端解析不了
    38. // builder.append("{'id':1,'name':'张三','age':20,'addr':'北京大兴区'},");
    39. // builder.append("{'id':2,'name':'李四','age':22,'addr':'北京海淀区'}");
    40. // builder.append("{\"id\":1,\"name\":\"张三\",\"age\":20,\"addr\":\"北京大兴区\"},");
    41. // builder.append("{\"id\":2,\"name\":\"李四\",\"age\":22,\"addr\":\"北京海淀区\"}");
    42. //连接数据库校验用户名是否存在
    43. Connection conn=null;
    44. PreparedStatement ps=null;
    45. ResultSet rs=null;
    46. //1.注册驱动
    47. //System.setProperty("jdbc.drivers","com.mysql.cj.jdbc.Driver");
    48. try {
    49. Class.forName("com.mysql.cj.jdbc.Driver");
    50. //2.获取连接
    51. conn= DriverManager.getConnection("xxx", "xxx", "xxx");
    52. //3.获取执行对象
    53. String sql="select id,name,age,addr from t_stu";
    54. ps = conn.prepareStatement(sql);
    55. //4.执行sql
    56. rs = ps.executeQuery();
    57. //5.处理结果集
    58. builder.append("[");
    59. while(rs.next()){//如果只有一条的情况
    60. String id = rs.getString("id");
    61. String name = rs.getString("name");
    62. String age = rs.getString("age");
    63. String addr = rs.getString("addr");
    64. //{"id":1,"name":"zhangsan","age":13,"addr":"北京大兴区"}
    65. builder.append("{\"id\":"+id+",\"name\":\""+name+"\",\"age\":"+age+",\"addr\":\""+addr+"\"},");
    66. }
    67. //去掉最后一个{},后面的逗号
    68. jsonStr=builder.substring(0, builder.length()-1)+"]";
    69. } catch (Exception e) {
    70. e.printStackTrace();
    71. }finally {
    72. if(rs!=null){
    73. try {
    74. rs.close();
    75. } catch (SQLException e) {
    76. e.printStackTrace();
    77. }
    78. }
    79. if(ps!=null){
    80. try {
    81. ps.close();
    82. } catch (SQLException e) {
    83. e.printStackTrace();
    84. }
    85. }
    86. if(conn!=null){
    87. try {
    88. conn.close();
    89. } catch (SQLException e) {
    90. e.printStackTrace();
    91. }
    92. }
    93. }
    94. writer.print(jsonStr);
    95. }
    96. }

    测试

    这样拼接JSON太麻烦   使用fastjson对程序进行改进

    引入jar包

    不需要那么麻烦进行拼接

    1. package com.web;
    2. import com.alibaba.fastjson.JSON;
    3. import com.pojo.Student;
    4. import javax.servlet.ServletException;
    5. import javax.servlet.annotation.WebServlet;
    6. import javax.servlet.http.HttpServlet;
    7. import javax.servlet.http.HttpServletRequest;
    8. import javax.servlet.http.HttpServletResponse;
    9. import java.io.IOException;
    10. import java.io.PrintWriter;
    11. import java.sql.*;
    12. import java.util.ArrayList;
    13. import java.util.List;
    14. /**
    15. * @author hrui
    16. * @date 2023/9/3 23:57
    17. */
    18. @WebServlet("/studys")
    19. public class AjaxRequestStudys extends HttpServlet {
    20. @Override
    21. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    22. //连接数据库,查询学院
    23. resp.setContentType("text/html;charset=utf-8");
    24. PrintWriter writer = resp.getWriter();
    25. // StringBuilder builder=new StringBuilder();
    26. // String jsonStr="";
    27. List<Student> list=new ArrayList<>();
    28. // builder.append("");
    29. // builder.append("1");
    30. // builder.append("张三");
    31. // builder.append("20");
    32. // builder.append("北京大兴区");
    33. // builder.append("");
    34. // builder.append("");
    35. // builder.append("2");
    36. // builder.append("李四");
    37. // builder.append("22");
    38. // builder.append("北京海淀区");
    39. // builder.append("");
    40. //拼接一个JSON数组回去
    41. //builder.append("[");
    42. //''单引号也不行 前端解析不了
    43. // builder.append("{'id':1,'name':'张三','age':20,'addr':'北京大兴区'},");
    44. // builder.append("{'id':2,'name':'李四','age':22,'addr':'北京海淀区'}");
    45. // builder.append("{\"id\":1,\"name\":\"张三\",\"age\":20,\"addr\":\"北京大兴区\"},");
    46. // builder.append("{\"id\":2,\"name\":\"李四\",\"age\":22,\"addr\":\"北京海淀区\"}");
    47. //连接数据库校验用户名是否存在
    48. Connection conn=null;
    49. PreparedStatement ps=null;
    50. ResultSet rs=null;
    51. String s="";
    52. //1.注册驱动
    53. //System.setProperty("jdbc.drivers","com.mysql.cj.jdbc.Driver");
    54. try {
    55. Class.forName("com.mysql.cj.jdbc.Driver");
    56. //2.获取连接
    57. conn= DriverManager.getConnection("xxx", "xxx", "xxx");
    58. //3.获取执行对象
    59. String sql="select id,name,age,addr from t_stu";
    60. ps = conn.prepareStatement(sql);
    61. //4.执行sql
    62. rs = ps.executeQuery();
    63. //5.处理结果集
    64. //builder.append("[");
    65. while(rs.next()){//如果只有一条的情况
    66. String id = rs.getString("id");
    67. String name = rs.getString("name");
    68. String age = rs.getString("age");
    69. String addr = rs.getString("addr");
    70. //{"id":1,"name":"zhangsan","age":13,"addr":"北京大兴区"}
    71. //builder.append("{\"id\":"+id+",\"name\":\""+name+"\",\"age\":"+age+",\"addr\":\""+addr+"\"},");
    72. Student stu=new Student(id,name,age,addr);
    73. list.add(stu);
    74. }
    75. //去掉最后一个{},后面的逗号
    76. //jsonStr=builder.substring(0, builder.length()-1)+"]";
    77. s = JSON.toJSONString(list);
    78. } catch (Exception e) {
    79. e.printStackTrace();
    80. }finally {
    81. if(rs!=null){
    82. try {
    83. rs.close();
    84. } catch (SQLException e) {
    85. e.printStackTrace();
    86. }
    87. }
    88. if(ps!=null){
    89. try {
    90. ps.close();
    91. } catch (SQLException e) {
    92. e.printStackTrace();
    93. }
    94. }
    95. if(conn!=null){
    96. try {
    97. conn.close();
    98. } catch (SQLException e) {
    99. e.printStackTrace();
    100. }
    101. }
    102. }
    103. writer.print(s);
    104. }
    105. }

    测试

    下面用XML进行数据交互(XML体积大,现在相对用的少)

    后端代码   注意下Content-Type

    1. @WebServlet("/xmlstudys")
    2. public class AjaxRequestXML extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. //注意响应类型是XML
    6. resp.setContentType("text/xml;charset=utf-8");
    7. PrintWriter writer = resp.getWriter();
    8. StringBuilder xml=new StringBuilder();
    9. /*
    10. XML格式
    11. <Students>
    12. <Student>
    13. <id>1</id>
    14. <name>张三</name>
    15. <age>22</age>
    16. <addr>北京大兴区</addr>
    17. </Student>
    18. <Student>
    19. <id>2</id>
    20. <name>李四</name>
    21. <age>23</age>
    22. <addr>北京海淀区</addr>
    23. </Student>
    24. </Students>
    25. */
    26. xml.append("");
    27. xml.append("");
    28. xml.append("1");
    29. xml.append("张三");
    30. xml.append("22");
    31. xml.append("北京大兴区");
    32. xml.append("");
    33. xml.append("");
    34. xml.append("2");
    35. xml.append("李四");
    36. xml.append("23");
    37. xml.append("北京海淀区");
    38. xml.append("");
    39. xml.append("");
    40. writer.print(xml);
    41. }
    42. }

    前端代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>使用XML完成数据交互</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. window.onload=function(){
    10. document.getElementById("btn").onclick=function(){
    11. var xhr=new XMLHttpRequest();
    12. xhr.onreadystatechange=function (){
    13. if(this.readyState==4){
    14. if(this.status==200){
    15. //服务器响应XML字符串,如何接收
    16. //使用XMLHTTPRequest的responseXML属性,接收之后,自动封装成document对象(文档对象)
    17. var xmlDoc=this.responseXML;
    18. console.log(xmlDoc)
    19. }else{
    20. }
    21. }
    22. }
    23. xhr.open("get","/ajax/xmlstudys",true)
    24. //xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
    25. xhr.send()
    26. }
    27. }
    28. </script>
    29. <input type="button" value="显示学生列表" id="btn">
    30. <table width="50%" border="1px">
    31. <tr>
    32. <th>序号</th>
    33. <th>姓名</th>
    34. <th>年龄</th>
    35. <th>住址</th>
    36. </tr>
    37. <tbody id="stubody">
    38. <!-- <tr>-->
    39. <!-- <td>1</td>-->
    40. <!-- <td>张三</td>-->
    41. <!-- <td>20</td>-->
    42. <!-- <td>北京大兴区</td>-->
    43. <!-- </tr>-->
    44. <!-- <tr>-->
    45. <!-- <td>2</td>-->
    46. <!-- <td>李四</td>-->
    47. <!-- <td>22</td>-->
    48. <!-- <td>北京海淀区</td>-->
    49. <!-- </tr>-->
    50. </tbody>
    51. </table>
    52. </body>
    53. </html>

    测试

    具体前端代码

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>使用XML完成数据交互</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. window.onload=function(){
    10. document.getElementById("btn").onclick=function(){
    11. var xhr=new XMLHttpRequest();
    12. xhr.onreadystatechange=function (){
    13. if(this.readyState==4){
    14. if(this.status==200){
    15. //服务器响应XML字符串,如何接收
    16. //使用XMLHTTPRequest的responseXML属性,接收之后,自动封装成document对象(文档对象)
    17. var xmlDoc=this.responseXML;
    18. console.log(xmlDoc)
    19. //获取所有<student>元素,返回了多个对象,是个数组
    20. var students=xmlDoc.getElementsByTagName("student")
    21. console.log(students[0].nodeName)
    22. var html=""
    23. for(var i=0;i<students.length;i++){
    24. var stu=students[i]
    25. //获取<student>节点下所有子元素
    26. var s=stu.childNodes;
    27. html+=""
    28. for(var j=0;j<s.length;j++){
    29. var node=s[j]
    30. if(node.nodeName=="id"){
    31. console.log("id="+node.textContent)
    32. html+=""+node.textContent+""
    33. }
    34. if(node.nodeName=="name"){
    35. console.log("name="+node.textContent)
    36. html+=""+node.textContent+""
    37. }
    38. if(node.nodeName=="age"){
    39. console.log("age="+node.textContent)
    40. html+=""+node.textContent+""
    41. }
    42. if(node.nodeName=="addr"){
    43. console.log("addr="+node.textContent)
    44. html+=""+node.textContent+""
    45. }
    46. }
    47. html+=""
    48. }
    49. document.getElementById("stubody").innerHTML=html
    50. }else{
    51. }
    52. }
    53. }
    54. xhr.open("get","/ajax/xmlstudys",true)
    55. //xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
    56. xhr.send()
    57. }
    58. }
    59. </script>
    60. <input type="button" value="显示学生列表" id="btn">
    61. <table width="50%" border="1px">
    62. <tr>
    63. <th>序号</th>
    64. <th>姓名</th>
    65. <th>年龄</th>
    66. <th>住址</th>
    67. </tr>
    68. <tbody id="stubody">
    69. <!-- <tr>-->
    70. <!-- <td>1</td>-->
    71. <!-- <td>张三</td>-->
    72. <!-- <td>20</td>-->
    73. <!-- <td>北京大兴区</td>-->
    74. <!-- </tr>-->
    75. <!-- <tr>-->
    76. <!-- <td>2</td>-->
    77. <!-- <td>李四</td>-->
    78. <!-- <td>22</td>-->
    79. <!-- <td>北京海淀区</td>-->
    80. <!-- </tr>-->
    81. </tbody>
    82. </table>
    83. </body>
    84. </html>

  • 相关阅读:
    Windows下载安装RabbitMQ客户端(2024最新篇)
    (附源码)APP+springboot个人健康管理 毕业设计 202031
    《Scratch等级考试(1~4级)历届真题解析》专栏总目录
    禅道登录-调用API方式
    国内领先的五大API接口供应商
    Spring中Bean的生命周期
    Spring MVC(一)【什么是Spring MVC】
    【C++】类和对象——构造函数
    训练第一个MMClassification模型
    在beforeDestroy中销毁localStorage中的值无效
  • 原文地址:https://blog.csdn.net/tiantiantbtb/article/details/132656215