首页 > 解决方案 > 我正在使用 jsp ajax 向 servlet 发送表单数据,但是 ajax 响应在纳秒内消失

问题描述

我通过 Servlet 上的 AJAX 使用 Jsp 发送表单数据。
reg.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form>
        Enter name:<input type="text" id="name" /> <br />

        <button onclick="callJqueryAjax()">Save</button>
    </form>
    <span id="result"></span>

    <script
        src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
        function callJqueryAjax() {
            location.reload(false);
            var name = $('#name').val();
            console.log(name);

            $.ajax({
                url : 'Save',
                method : 'POST',
                data : {
                    name : name,
                },
                success : function(resultText) {
                    $("#result").html(resultText);

                }
            });
        }
    </script>
</body>
</html>

SaveMe.java

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Save")
public class SaveMe extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private Connection makeCon;
    private Statement stmt;

    public void init(ServletConfig config) throws ServletException {
        JdbcCon jdbcCon = new JdbcCon();
        makeCon = jdbcCon.makeCon();
        try {
            stmt = makeCon.createStatement();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse res) throws ServletException, IOException {
        String name = request.getParameter("name");

        res.setContentType("text/html");

        PrintWriter out = res.getWriter();

        String sql = "insert into users (name) Values('" + name + "')";
        System.out.println(sql);

        try {

            int result = stmt.executeUpdate(sql);

            if (result > 0) {
                out.print("Inserted");

            } else
                out.print("Not Inserted");

        } catch (SQLException e) {

        }

    }

}

我在 ajax 中收到输出,但问题是 JSP 自己重新加载并删除响应以及从文本框中删除我的响应自行消失的数据。

请为我提供解决方案以及编写 ajax 调用的更好方法

标签: javaajaxjspservlets

解决方案


首先我不明白你为什么使用“location.reload(false);” 在提交 ajax 请求之前在您的 JSP 页面中。你可以删除它。此外,使用 ajax 请求时的一个好习惯是指定“dataType”,在您的情况下为“html”。这是一个例子:

    $.ajax( {
    type : 'POST',
    url : 'SaveMe',
    success : function(result) {
      $("#result").html(result);
    },
    dataType : "html"
});

推荐阅读