$.ajax JSON检索失败-JSP



我正在尝试从Servlet接收JSON数组并将数据添加到表中。但是JSON或文本不会出现在jsp中。我尝试过很多东西。这是我的JSP

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Search a User</title>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('#search1').click(function ()
            {
                var searchdata = $("#searchword").val();
                $.ajax({
                    type: "GET",
                    url: "Search", //this is my servlet
                    data: {searchword :searchdata },
                    success: function(data){
                        alert(data);
                    }
                });
            });
        });
    </script>
</head>
<body>
<form method="post" class="form-horizontal">
    <fieldset>

        <div class="form-group">
            <label class="col-md-4 control-label" for="searchword">Search a User</label>
            <div class="col-md-5">
                <input id="searchword" type="text" placeholder="Add User's name" class="form-control input-md" required="">
            </div>
        </div>
        <div class="form-group">
            <label class="col-md-4 control-label" for=""></label>
            <div class="col-md-3">
                <button id="search1" class="btn btn-block btn-success">Search</button>
            </div>
        </div>
    </fieldset>
</form>
</body>
</html>

在这里,我只是想确保成功功能发挥作用。但是警报不起作用。我添加了我们从Servlet中检索到的不带字符串的警报,用于演示建议。但它们也不起作用。我确信我的错误在JSP方面,因为我可以看到JSON数组和Servlet在log4j日志中检索搜索词。但是对于"确保",我也将在此处添加servlet。

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import hsenid.DBConnector;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Search extends HttpServlet {
    private static final Logger logger = LogManager.getLogger(Search.class);

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        PrintWriter out = resp.getWriter();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        String username = req.getParameter("searchword");
        DBConnector dbpool = (DBConnector) getServletContext().getAttribute("DBConnection");
        JsonArray jsonArray = new JsonArray();
        logger.info(username);
        try {
            Connection myConn = dbpool.getConn();
            String likeQuery = "Select * from userdetails WHERE username LIKE ?";
            preparedStatement = myConn.prepareStatement(likeQuery);
            preparedStatement.setString(1, "%" + username + "%");
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                JsonObject jsonObject = new JsonObject();
                jsonObject.addProperty("firstName", resultSet.getString("fname"));
                jsonObject.addProperty("lastName", resultSet.getString("lname"));
                jsonObject.addProperty("dob", resultSet.getString("dob"));
                jsonObject.addProperty("country", resultSet.getString("country"));
                jsonObject.addProperty("email", resultSet.getString("email"));
                jsonObject.addProperty("mobile", resultSet.getString("mnumber"));
                jsonObject.addProperty("username", resultSet.getString("username"));
                jsonArray.add(jsonObject);
            }
            logger.info("JSON ARRAY Created");
            logger.info(jsonArray.toString());
            resp.getWriter().write(jsonArray.toString());
            out.println(jsonArray);
        } catch (SQLException e) {
            logger.error(e.getMessage());
        }
    }
}

您正在两次写入结果JSON数组,因此内容不是有效的JSON响应,JQuery将无法解析它:

resp.getWriter().write(jsonArray.toString());
out.println(jsonArray);   // out is resp.getWriter() 

所以只需删除第二行。

为了更好地诊断此类错误,您还应该在$.ajax调用中添加error回调,并查看开发人员控制台是否显示任何错误。

最新更新