Ajax的基础使用

爱被打了一巴掌 2024-03-30 17:34 38阅读 0赞

Ajax的基础使用

简介:Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

在以前没有ajax的时候,前后端的交互需要使用到,JSP,然后了JSP还是要由后端程序员来写,极大的提高了后端程序员的工作量,降低的开发效率。
在这里插入图片描述
有了ajax这种异步请求工具之后,后端程序员就不在需要使用到JSP了,前端的html页面可以通过ajax的异步请求与后端直接联系,这样前后端的分工就更加明确了。
在这里插入图片描述

我们通过一个例子来讲解ajax的使用吧。

项目创建

第一步
在这里插入图片描述
在这里插入图片描述

第二步
添加配置文件各种依赖

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>org.example</groupId>
  5. <artifactId>AjaxStudy</artifactId>
  6. <packaging>war</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>AjaxStudy Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <maven.compiler.source>8</maven.compiler.source>
  12. <maven.compiler.target>8</maven.compiler.target>
  13. </properties>
  14. <dependencies>
  15. <dependency>
  16. <groupId>javax.servlet</groupId>
  17. <artifactId>javax.servlet-api</artifactId>
  18. <version>3.1.0</version>
  19. <scope>provided</scope>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.alibaba</groupId>
  23. <artifactId>fastjson</artifactId>
  24. <version>1.2.62</version>
  25. </dependency>
  26. </dependencies>
  27. <build>
  28. <plugins>
  29. <plugin>
  30. <groupId>org.apache.tomcat.maven</groupId>
  31. <artifactId>tomcat7-maven-plugin</artifactId>
  32. <version>2.2</version>
  33. </plugin>
  34. </plugins>
  35. </build>
  36. </project>

第三步
AjaxServlet

  1. package com.jakelihua.servlet;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. import java.io.IOException;
  6. @WebServlet("/ajaxServlet")
  7. public class AjaxServlet extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  10. //1. 响应数据
  11. response.getWriter().write("hello ajax~");
  12. }
  13. @Override
  14. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15. this.doGet(request, response);
  16. }
  17. }

第四步
进入w3c官网查看教程
https://www.w3school.com.cn/js/js\_ajax\_intro.asp
在这里插入图片描述

  1. 创建核心对象
    在这里插入图片描述

    var xhttp;
    if (window.XMLHttpRequest) {

    1. xhttp = new XMLHttpRequest();
    2. } else {
    3. // code for IE6, IE5
    4. xhttp = new ActiveXObject("Microsoft.XMLHTTP");

    }

  2. 发送请求
    在这里插入图片描述
    在这里插入图片描述

    xhttp.open(“GET”, “http://localhost:8080/AjaxStudy/ajaxServlet“);
    xhttp.send();

  3. 获取响应

在这里插入图片描述

  1. xhttp.onreadystatechange = function() {
  2. if (this.readyState == 4 && this.status == 200) {
  3. alert(this.responseText); // 我们这里显示一下这个后端反馈的文本
  4. }
  5. };

完整代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <script>
  9. // 1. 创建核心对象
  10. var xhttp;
  11. if (window.XMLHttpRequest) {
  12. xhttp = new XMLHttpRequest();
  13. } else {
  14. // code for IE6, IE5
  15. xhttp = new ActiveXObject("Microsoft.XMLHTTP");
  16. }
  17. // 2. 发送请求
  18. xhttp.open("GET", "http://localhost:8080/AjaxStudy/ajaxServlet");
  19. xhttp.send();
  20. // 3. 获取响应
  21. xhttp.onreadystatechange = function() {
  22. if (this.readyState == 4 && this.status == 200) {
  23. alert(this.responseText);
  24. }
  25. };
  26. </script>
  27. </body>
  28. </html>

运行结果
在这里插入图片描述
在这里插入图片描述

案例

这个案例的目的就是完成我们常见的像百度啊,那种点击搜索栏就会出现提示词那种异步请求,网页没有刷新,但是确实响应了,然后紧跟时代,这个案例我使用SpringBoot来做,最开始用的还是传统的MVC,但是说实话,太麻烦了,一大堆配置,调试都要半天。
在这里插入图片描述

数据库建表语句

  1. /*
  2. Navicat MySQL Data Transfer
  3. Source Server : 本机
  4. Source Server Type : MySQL
  5. Source Server Version : 80024
  6. Source Host : localhost:3306
  7. Source Schema : projectdatabase
  8. Target Server Type : MySQL
  9. Target Server Version : 80024
  10. File Encoding : 65001
  11. Date: 11/01/2023 20:27:49
  12. */
  13. SET NAMES utf8mb4;
  14. SET FOREIGN_KEY_CHECKS = 0;
  15. -- ----------------------------
  16. -- Table structure for user
  17. -- ----------------------------
  18. DROP TABLE IF EXISTS `user`;
  19. CREATE TABLE `user` (
  20. `id` int NOT NULL AUTO_INCREMENT,
  21. `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  22. `password` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  23. PRIMARY KEY (`id`) USING BTREE
  24. ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
  25. -- ----------------------------
  26. -- Records of user
  27. -- ----------------------------
  28. INSERT INTO `user` VALUES (1, 'LIHUA', '123456');
  29. INSERT INTO `user` VALUES (2, 'zhangsan', '123');
  30. INSERT INTO `user` VALUES (3, 'LISI', '456489');
  31. INSERT INTO `user` VALUES (4, 'heheheh', '123456');
  32. INSERT INTO `user` VALUES (5, 'ahuang', '123');
  33. INSERT INTO `user` VALUES (6, 'dsdad', '154654');
  34. SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

项目结构

一定注意一点,就是这个后端的java类,一定要写在Springbootlogincheck包下面,不然会导致网址访问不到404错误。
在这里插入图片描述

User类
  1. package com.example.springbootlogincheck.Bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. public class User {
  9. private Integer id;
  10. private String username;
  11. private String password;
  12. }
IndexController类
  1. package com.example.springbootlogincheck.Controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. public class IndexController {
  6. @RequestMapping("/")
  7. public String index(){
  8. return"admin/register.html";
  9. }
  10. }
UserController
  1. package com.example.springbootlogincheck.Controller;
  2. import com.example.springbootlogincheck.Bean.User;
  3. import com.example.springbootlogincheck.Dao.UserDao;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.IOException;
  12. import java.util.List;
  13. @Controller
  14. public class UserController {
  15. @Autowired
  16. UserDao userDao;
  17. @ResponseBody
  18. @GetMapping("/selectUser")
  19. public String SelectUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20. String username = request.getParameter("username");
  21. boolean flag = false;
  22. List<User> list = userDao.selectList(null);
  23. for (User user : list){
  24. if (user.getUsername().equals(username)){
  25. flag = true;
  26. }
  27. }
  28. if (flag) {
  29. // 如果查到了就返回true字符串 反之就是false字符串
  30. return "true";
  31. }
  32. return "false";
  33. }
  34. }
UserDao
  1. package com.example.springbootlogincheck.Dao;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.example.springbootlogincheck.Bean.User;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper
  6. public interface UserDao extends BaseMapper<User> {
  7. }

前端网页

register.css
  1. * {
  2. margin: 0;
  3. padding: 0;
  4. list-style-type: none;
  5. }
  6. .reg-content{
  7. padding: 30px;
  8. margin: 3px;
  9. }
  10. a, img {
  11. border: 0;
  12. }
  13. body {
  14. background-image: url("../imgs/reg_bg_min.jpg") ;
  15. text-align: center;
  16. }
  17. table {
  18. border-collapse: collapse;
  19. border-spacing: 0;
  20. }
  21. td, th {
  22. padding: 0;
  23. height: 90px;
  24. }
  25. .inputs{
  26. vertical-align: top;
  27. }
  28. .clear {
  29. clear: both;
  30. }
  31. .clear:before, .clear:after {
  32. content: "";
  33. display: table;
  34. }
  35. .clear:after {
  36. clear: both;
  37. }
  38. .form-div {
  39. background-color: rgba(255, 255, 255, 0.27);
  40. border-radius: 10px;
  41. border: 1px solid #aaa;
  42. width: 424px;
  43. margin-top: 150px;
  44. margin-left:1050px;
  45. padding: 30px 0 20px 0px;
  46. font-size: 16px;
  47. box-shadow: inset 0px 0px 10px rgba(255, 255, 255, 0.5), 0px 0px 15px rgba(75, 75, 75, 0.3);
  48. text-align: left;
  49. }
  50. .form-div input[type="text"], .form-div input[type="password"], .form-div input[type="email"] {
  51. width: 268px;
  52. margin: 10px;
  53. line-height: 20px;
  54. font-size: 16px;
  55. }
  56. .form-div input[type="checkbox"] {
  57. margin: 20px 0 20px 10px;
  58. }
  59. .form-div input[type="button"], .form-div input[type="submit"] {
  60. margin: 10px 20px 0 0;
  61. }
  62. .form-div table {
  63. margin: 0 auto;
  64. text-align: right;
  65. color: rgba(64, 64, 64, 1.00);
  66. }
  67. .form-div table img {
  68. vertical-align: middle;
  69. margin: 0 0 5px 0;
  70. }
  71. .footer {
  72. color: rgba(64, 64, 64, 1.00);
  73. font-size: 12px;
  74. margin-top: 30px;
  75. }
  76. .form-div .buttons {
  77. float: right;
  78. }
  79. input[type="text"], input[type="password"], input[type="email"] {
  80. border-radius: 8px;
  81. box-shadow: inset 0 2px 5px #eee;
  82. padding: 10px;
  83. border: 1px solid #D4D4D4;
  84. color: #333333;
  85. margin-top: 5px;
  86. }
  87. input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {
  88. border: 1px solid #50afeb;
  89. outline: none;
  90. }
  91. input[type="button"], input[type="submit"] {
  92. padding: 7px 15px;
  93. background-color: #3c6db0;
  94. text-align: center;
  95. border-radius: 5px;
  96. overflow: hidden;
  97. min-width: 80px;
  98. border: none;
  99. color: #FFF;
  100. box-shadow: 1px 1px 1px rgba(75, 75, 75, 0.3);
  101. }
  102. input[type="button"]:hover, input[type="submit"]:hover {
  103. background-color: #5a88c8;
  104. }
  105. input[type="button"]:active, input[type="submit"]:active {
  106. background-color: #5a88c8;
  107. }
  108. .err_msg{
  109. color: red;
  110. padding-right: 170px;
  111. }
  112. #password_err,#tel_err{
  113. padding-right: 195px;
  114. }
  115. #reg_btn{
  116. margin-right:50px; width: 285px; height: 45px; margin-top:20px;
  117. }
  118. #checkCode{
  119. width: 100px;
  120. }
  121. #changeImg{
  122. color: aqua;
  123. }
img

a.jpg
在这里插入图片描述

reg_bg_min.jpg
在这里插入图片描述

register.html

js部分
在这个js部分里面,一个点需要注意一下,就是这个responseText这个属性,这个属性接受的值首先是String类型,然后了,这个值就是访问的链接下对应的方法的返回值的对应的String类型格式。

  1. <script>
  2. //1. 给用户名输入框绑定 失去焦点事件
  3. document.getElementById("username").onblur = function () {
  4. //2. 发送ajax请求
  5. // 获取用户名的值
  6. var username = this.value;
  7. //2.1. 创建核心对象
  8. var xhttp;
  9. if (window.XMLHttpRequest) {
  10. xhttp = new XMLHttpRequest();
  11. } else {
  12. // code for IE6, IE5
  13. xhttp = new ActiveXObject("Microsoft.XMLHTTP");
  14. }
  15. //2.2. 发送请求
  16. xhttp.open("GET", "http://localhost:8080/ajax-demo/selectUserServlet?username="+username);
  17. xhttp.send();
  18. //2.3. 获取响应
  19. xhttp.onreadystatechange = function() {
  20. if (this.readyState == 4 && this.status == 200) {
  21. //alert(this.responseText);
  22. //判断
  23. if(this.responseText == "true"){
  24. //用户名存在,显示提示信息
  25. document.getElementById("username_err").style.display = '';
  26. }else {
  27. //用户名不存在 ,清楚提示信息
  28. document.getElementById("username_err").style.display = 'none';
  29. }
  30. }
  31. };
  32. }
  33. </script>

完整代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>欢迎注册</title>
  6. <link href="css/register.css" rel="stylesheet">
  7. </head>
  8. <body>
  9. <div class="form-div">
  10. <div class="reg-content">
  11. <h1>欢迎注册</h1>
  12. <span>已有帐号?</span> <a href="login.html">登录</a>
  13. </div>
  14. <form id="reg-form" action="#" method="get">
  15. <table>
  16. <tr>
  17. <td>用户名</td>
  18. <td class="inputs">
  19. <input name="username" type="text" id="username">
  20. <br>
  21. <span id="username_err" class="err_msg" style="display: none">用户名已存在</span>
  22. </td>
  23. </tr>
  24. <tr>
  25. <td>密码</td>
  26. <td class="inputs">
  27. <input name="password" type="password" id="password">
  28. <br>
  29. <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
  30. </td>
  31. </tr>
  32. <tr>
  33. <td>验证码</td>
  34. <td class="inputs">
  35. <input name="checkCode" type="text" id="checkCode">
  36. <img src="imgs/a.jpg">
  37. <a href="#" id="changeImg">看不清?</a>
  38. </td>
  39. </tr>
  40. </table>
  41. <div class="buttons">
  42. <input value="注 册" type="submit" id="reg_btn">
  43. </div>
  44. <br class="clear">
  45. </form>
  46. </div>
  47. <script>
  48. //1. 给用户名输入框绑定 失去焦点事件
  49. document.getElementById("username").onblur = function () {
  50. //2. 发送ajax请求
  51. // 获取用户名的值
  52. var username = this.value;
  53. //2.1. 创建核心对象
  54. var xhttp;
  55. if (window.XMLHttpRequest) {
  56. xhttp = new XMLHttpRequest();
  57. } else {
  58. // code for IE6, IE5
  59. xhttp = new ActiveXObject("Microsoft.XMLHTTP");
  60. }
  61. //2.2. 发送请求
  62. xhttp.open("GET", "http://localhost:8080/ajax-demo/selectUserServlet?username="+username);
  63. xhttp.send();
  64. //2.3. 获取响应
  65. xhttp.onreadystatechange = function() {
  66. if (this.readyState == 4 && this.status == 200) {
  67. //alert(this.responseText);
  68. //判断
  69. if(this.responseText == "true"){
  70. //用户名存在,显示提示信息
  71. document.getElementById("username_err").style.display = '';
  72. }else {
  73. //用户名不存在 ,清楚提示信息
  74. document.getElementById("username_err").style.display = 'none';
  75. }
  76. }
  77. };
  78. }
  79. </script>
  80. </body>
  81. </html>

效果展示
如果输入的账户在失去焦点之后,发现这个用户没有在数据库中存在就不会发生啥。
在这里插入图片描述
如果存在的话就显示这个信息,已经存在了。
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,38人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Ajax基础

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 通过在后台与服