【问题标题】:$.ajax JSON retrieval fails - JSP$.ajax JSON 检索失败 - JSP
【发布时间】:2016-08-28 06:53:43
【问题描述】:

我正在尝试从 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 日志中检索 search word。但是为了确保我也会在此处添加 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());
        }

    }
}

【问题讨论】:

  • 查看浏览器控制台错误并告诉我们。在firefox中打开控制台CTRL+SHIFT+J
  • 谢谢阿陶尔。那一刻我不知道如何回答你的问题,然后我了解了萤火虫。问题解决了:)
  • 干杯。 @Menuka ishan :)

标签: java json ajax jsp servlets


【解决方案1】:

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

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

所以只需删除第二行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多