Java Web中Ajax技术使用方法介绍

JavaWeb中Ajax技术使用方法介绍

什么是Ajax

Ajax全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML。

在Java Web中,Ajax可以让前端页面异步地向后台Java Servlet/Controller发送请求,获取响应数据,更新页面的部分内容,从而提升用户交互的体验。

使用Ajax

1. 引入 Ajax 相关的 JavaScript 库

在头部引入jquery.min.jsjquery.md5.js两个文件。

<script type="text/javascript" src="${rootPath}/static/js/jquery.min.js"></script>
<script type="text/javascript" src="${rootPath}/static/js/jquery.md5.js"></script>

在${rootPath}中填入工程的相对路径。

2. 发送AJAX请求

使用jQuery的ajax()方法向后台发送ajax请求:

function sendAjaxReq() {
    $.ajax({
        type: "POST", // HTTP请求类型为POST
        url: "${rootPath}/ajax", // 请求url
        data: { // 请求参数
            name: 'Jack',
            age: 19
        },
        dataType: "json", // 从服务器返回的结果是什么数据类型
        success: function (response) { // 回调函数,处理请求成功后的结果
            console.log(response);
        },
        error: function (response) { //  请求失败时的回调函数
            console.log(response);
        }
    });
}

上述代码的解释:

  • 请求类型为POST方式
  • 请求url是${rootPath}/ajax,表示向本工程的ajaxServlet发送请求
  • 请求参数为一个Json对象{name: 'Jack', age: 19}
  • 从服务器返回的结果是json类型的数据
  • 成功获取到响应后触发回调函数,回调函数的参数是响应结果对象
  • 请求失败时触发error回调函数,回调函数的参数是响应结果对象

3. 接收Ajax请求

在Java Servlet或Controller中使用@ResponseBody注解将Java对象转换成JSon格式返回:

@RequestMapping("/ajax")
@ResponseBody
public String ajax(HttpServletRequest request, HttpServletResponse response) {
    String name = request.getParameter("name");
    int age = Integer.parseInt(request.getParameter("age"));

    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("name", name);
    resultMap.put("age", age);
    resultMap.put("hobby", "swimming");
    String result = new Gson().toJson(resultMap);

    return result;
}

上述代码的解释:

  • url为@RequestMapping(value = "/ajax"),表示接收/ajax请求
  • 使用@ResponseBody注解将Map对象转换成json字符串返回

示例说明

示例1:表单验证

对表单提交进行Ajax验证,当表单输入有误时在相应位置显示错误信息。

$("#registerForm").submit(function() {

    if (!isUserNameValid($("#username").val())) {
        showErrorMessage("#username", "用户名长度应为4-16位字母数字");
        return false;
    }
    if (!isPasswdValid($("#password").val())) {
        showErrorMessage("#password", "密码长度应为6-16位字母数字特殊字符");
        return false;
    }
    if ($("#password").val() != ($("#password2").val())) {
        showErrorMessage("#password2", "两次密码输入不一致");
        return false;
    }

    $.ajax({
        type: "POST",
        url: "${rootPath}/register",
        data: {
            username: $("#username").val(),
            password: $.md5($("#password").val()),
            email: $("#email").val()
        },
        dataType: "json",
        success: function (response) {
            if (response.success == true) {
                //跳转到成功页面
            } else {
                if (response.reason == 1) {
                    showErrorMessage("#username", "用户名已存在");
                } else if (response.reason == 2) {
                    showErrorMessage("#email", "邮箱已被注册");
                } else {
                    showErrorMessage(".register-form>button", "注册失败,请稍后再试");
                }
            }
        },
        error: function () {
            showErrorMessage(".register-form>button", "发生未知错误,请稍后再试");
        }
    });

    return false;
});

上述的代码对一个id#registerForm的表单进行提交验证,将表单的值以jQuery的ajax()方法发送给后台的/register处理。

示例2:通讯录的增删改查

function getContacts() {
    $.ajax({
        type: "POST",
        url: "${rootPath}/contacts",
        dataType: "json",
        success: function (response) {
            if (response.success == true) {
                renderContacts(response.data);
            } else {
                alert("发生错误,请稍后重试!");
            }
        },
        error: function () {
            alert("发生系统错误,请稍后再试!");
        }
    });
}

function addContact() {
    var name = $("#name").val();
    var phone = $("#phone").val();

    $.ajax({
        type: "POST",
        url: "${rootPath}/contact/add",
        dataType: "json",
        data: {
            name: name,
            phone: phone
        },
        success: function (response) {
            if (response.success == true) {
                alert("添加成功!");
            } else {
                alert("发生错误,请稍后重试!");
            }
        },
        error: function () {
            alert("发生系统错误,请稍后再试!");
        }
    });
}

function deleteContact(id) {
    $.ajax({
        type: "POST",
        url: "${rootPath}/contact/delete",
        dataType: "json",
        data: {
            id: id
        },
        success: function (response) {
            if (response.success == true) {
                alert("删除成功!");
                getContacts();
            } else {
                alert("发生错误,请稍后重试!");
            }
        },
        error: function () {
            alert("发生系统错误,请稍后再试!");
        }
    });
}

function modifyContact(id) {
    var name = $("#" + id + " .name").val();
    var phone = $("#" + id + " .phone").val();

    $.ajax({
        type: "POST",
        url: "${rootPath}/contact/modify",
        dataType: "json",
        data: {
            id: id,
            name: name,
            phone: phone
        },
        success: function (response) {
            if (response.success == true) {
                alert("修改成功!");
            } else {
                alert("发生错误,请稍后重试!");
            }
        },
        error: function () {
            alert("发生系统错误,请稍后再试!");
        }
    });
}

上面代码对一个通讯录进行增删改查操作。其中getContacts函数用于向服务器获取通讯录列表,addContact浏览器发送“添加联系人”的请求,deleteContact用于删除指定联系人,modifyContact用于修改指定联系人。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Web中Ajax技术使用方法介绍 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • MyBatis如何实现多表查询(多对一、一对多)

    MyBatis 是一种优秀的持久层框架,它提供了一种灵活方便的方式来处理多表操作。多表查询中最常见的场景是多对一和一对多关系。接下来我们详细讲解 MyBatis 如何实现这两种关系的多表查询。 多对一查询 多对一查询通常是一个表中的多条数据对应另一个表中的一条数据。在 MyBatis 中实现多对一查询的步骤如下: 步骤一:建立实体类 我们需要建立两张表的实体…

    Java 2023年5月20日
    00
  • java使用UDP实现点对点通信

    下面是我为您提供的“java使用UDP实现点对点通信”的攻略。 一、什么是UDP UDP是无连接的传输协议,数据报(Datagram)套接字就是基于UDP协议实现的,它不会像TCP那样保证数据传输的可靠性,传输的数据包也不要求应答。但是,UDP具备比TCP更快的传输速度和更小的网络开销,因此,当需要高效传输数据时,可以选择UDP协议。 二、使用UDP实现点对…

    Java 2023年5月20日
    00
  • Java 使用JdbcTemplate 中的queryForList发生错误解决办法

    让我来详细讲解“Java 使用JdbcTemplate 中的queryForList发生错误解决办法”的完整攻略。 问题描述 在使用JdbcTemplate的queryForList方法查询数据时,有时候会出现错误,例如: org.springframework.dao.InvalidDataAccessApiUsageException: You need…

    Java 2023年6月16日
    00
  • MybatisPlus自带的queryWrapper实现时间倒序方式

    下面我将为您详细讲解“MybatisPlus自带的queryWrapper实现时间倒序方式”的完整攻略,并提供两条示例。 MybatisPlus是一种强大的mybatis框架增强工具,它内置了一些实用的功能,比如一些查询条件构造器(queryWrapper、lambdaQueryWrapper等)。其中queryWrapper是一个强大实用的查询条件构造器,…

    Java 2023年5月20日
    00
  • 详解SpringBoot和SpringBatch 使用

    详解 Spring Boot 和 Spring Batch 使用 在本文中,我们将深入了解 Spring Boot 和 Spring Batch 的使用。我们将介绍 Spring Boot 和 Spring Batch 的概念、配置和使用,并提供两个示例。 Spring Boot Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程…

    Java 2023年5月15日
    00
  • 原来Spring能注入集合和Map的computeIfAbsent是这么好用!

    大家好,我是3y,今天继续来聊我的开源项目austin啊,但实际内容更新不多。这文章主是想吹下水,主要聊聊我在更新项目中学到的小技巧。 今天所说的小技巧可能有很多人都会,但肯定也会有跟我一样之前没用过的。 消息推送平台?推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。 https://gitee.com/zhongfuch…

    Java 2023年5月8日
    00
  • Java中的Valid和Validated的比较内容

    当我们进行Java Bean校验时,通常会使用Hibernate提供的校验框架。Valid和Validated是该框架中最常用的两种表单验证注解,它们都是用于指定校验组,在校验时都可以用来限制哪些校验组中的校验规则生效。但是,它们有一些区别。下面我将详细讲解Java中Valid和Validated的比较内容,帮助读者理解它们的使用方法。 Valid注解 @V…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“InvalidUserException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidUserException”错误。这个错误通常由以下原因之一起: 用户名或密码错误:如果用户名或密码不正确,则可能会出现此。在这种情况下,需要检查用户名和密码以解决此问题。 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 以下是两个实例: 例 1…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部