前端向服务器传递数据的两种常用方式:提交表单和ajax,二者的区别是什么??

提交 form 表单和 AJAX 是前端向服务器传递数据的两种常用方式,核心区别在于页面是否刷新及交互体验,具体差异如下:(后附相关文件代码)

1. 页面行为

  • form 表单提交

    提交后会触发页面跳转 / 刷新,浏览器会加载服务器返回的新页面(或当前页面),原页面状态会被重置。

    原界面如下:

a5bc97b8043e850cb0d94b9925e6a22a

输入完账号密码后,点击提交,会跳转新的界面

38d3f750c26f5c467cf0605276417112

  • AJAX
    是 “异步 JavaScript 和 XML” 的缩写,通过异步请求与服务器通信,页面不会刷新,仅在后台与服务器交换数据并局部更新页面内容。

    点击提交之后页面显示如下:
    9d2f467d289f3cd2e1ed9894824d5371

2. 交互体验

  • form 表单提交
    提交后页面会有加载过程,用户需等待页面刷新,体验较 “中断式”。
  • AJAX
    可在不打断用户操作的情况下完成数据提交,配合加载动画等效果,体验更流畅(如注册时的 “实时用户名查重”)。

3. 数据处理方式

  • form 表单提交
    数据以表单默认格式(如application/x-www-form-urlencoded)提交,服务器返回的是完整 HTML 页面(或重定向指令)
  • AJAX
    可自定义数据格式(如 JSON、XML),服务器返回的是数据(而非完整页面),前端通过 JS 解析数据后,动态更新页面的指定区域。

4. 适用场景

  • form 表单提交
    适用于不需要复杂交互的场景(如简单的登录、注册页面),开发成本低。
  • AJAX
    适用于需要局部更新、异步交互的场景(如商品列表分页、评论实时提交、表单实时验证),提升用户体验。

form.html文件代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>form表单提交数据</title>
</head>
<body>
<!--form表单做数据提交,那么服务器端给浏览器返回的数据,会写入到新页面当中-->
<form action="/12ServletDemo/form" method="get">
    姓名: <input type="text" name="username" > <!--name作为key值提交数据-->
    密码: <input type="password" name="password"></input>
    <input type="submit" value="提交"></input>
</form>

</body>
</html>

FormServlet.java文件的代码如下:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/form")
public class FormServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("用户名:" + username);
        String password = req.getParameter("password");
        System.out.println("密码:" + password);
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        String data = "{\"code\":200,\"msg\":\"登录成功\"}";
        resp.getWriter().append(data);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

ajax.html文件代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    姓名: <input type="text" id="username" >
    密码: <input type="password" id="password"></input>
    <button id="btn" onclick="get()">登录</button>
</body>
<script>
    function get(){
        var username = $('#username').val();
        var password = $('#password').val();
        $.ajax({
            type: "get",
            url: "/12ServletDemo/form",
            data: {"username":username,"password":password},
            dataType: "json",
            success: function(data){
                alert(data.msg);
            }
        });
    }
</script>
</html>
posted @ 2026-02-07 15:36  桃桃不淘1  阅读(1)  评论(0)    收藏  举报