我正在尝试从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 Array和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());
}
}
}
答案 0 :(得分:1)
您正在编写结果JSON数组两次,因此内容不是有效的JSON响应,并且JQuery将无法解析它:
resp.getWriter().write(jsonArray.toString());
out.println(jsonArray); // out is resp.getWriter()
所以只需删除第二行。
为了更好地诊断此类错误,您还应该为error
调用添加$.ajax
回调,如果显示任何错误,请查看开发者控制台。