【发布时间】:2018-03-23 00:19:25
【问题描述】:
我正在尝试制作一个简单的文本框,它会根据用户输入的字符发起提示性反馈。我正在尝试从 Servlet 获取 JSON 对象,但我的 AJAX 调用以某种方式无法到达 servlet。在使用 this.status 检查 AJAX 请求的状态时,我收到错误代码 404。谁能建议我一个解决方案:
[![在此处输入图片描述][1]][1]
这是我的 servlet:FetchServ.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Connection con;
ResultSet rs;
java.sql.PreparedStatement pst;
String ch = request.getParameter("q");
String data;
ArrayList<String> list = new ArrayList();
response.setContentType("application/JSON");
PrintWriter out = response.getWriter();
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("drivers registered");
con = DriverManager.getConnection(con_url, userID, password);
System.out.println("connection created");
pst = con.prepareStatement("SELECT * FROM candidates where FirstName LIKE ?");
pst.setString(1, ch + "%");
rs = pst.executeQuery();
System.out.println("query executed");
while(rs.next())
{
data = rs.getString("FirstName");
list.add(data);
}
String json = new Gson().toJson(list);
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
response.getWriter().append("Served at: ").append(request.getContextPath());
} catch (SQLException | ClassNotFoundException e) {
System.err.println(e.getMessage());
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
jsp代码:
<script>
function suggest(str){
if(str.length == 0){
return;
}else{
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
document.getElementById("sugg").innerHTML = this.status;
if(this.readyState == 4 && this.status == 200){
//var res = JSON.parse(this.responseText);
document.getElementById("sugg").innerHTML = this.responseText;
}
};
try{
xmlhttp.open("GET", "com.test.java/FetchServ", true);
xmlhttp.send();
}catch(e)
{
alert("unable to connect ");
}
}
}
</script>
</head>
<body>
<form>
Search:<input type="text" onkeyup = "suggest(this.value)">
</form>
<p id = "sugg"></p>
</body>
</html>
这是我得到的结果: [![在此处输入图片描述][2]][2]
<display-name>ACtxtbox</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>FetchServ</servlet-name>
<servlet-class>com.test.java/FetchServ</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FetchServ</servlet-name>
<url-pattern>/FetchServ</url-pattern>
</servlet-mapping>
</web-app>
【问题讨论】:
-
浏览器调试工具告诉你什么?
-
我已经尝试过您的代码,并且运行良好
-
不要使用默认包尝试提供一些有意义的包并在您的 web.xml 中使用它
-
@stdunbar 这是 Chrome 调试器所说的:请求 URL:localhost:8080/ACtxtbox/src/com.test.java/FetchServ.java 请求方法:GET 状态代码:404 未找到远程地址:[::1]:8080 推荐人策略:no-referrer-when -降级
-
@SanjayPatel 你是说 AJAX 调用正在从后端返回建议吗???