我的问题是,我必须实现一个AJAX函数来显示所选项目是否缺货。但是,我没有显示我的错误信息,而是完全复制了网站,而且我非常,我尝试过的任何东西似乎都无法工作。
我的代码背后的想法是,我有一个下拉表单,操作设置为控制器(Webservlet),处理doGet和doPost,以及一个onchange事件显示调用AJAX函数的javascript函数(你可以看到我对这些方面不太自信,我对此知之甚少。
相关的JSP部分是:
<%@page contentType="text/html" pageEncoding="UTF-8" import="PCConfigurator.*"%>
<%
session.setMaxInactiveInterval(0);
ConfController ctrl = new ConfController();
%>
...
<script type="text/javascript">
var xmlHttpObject = new XMLHttpRequest();
function checkArticle(selectedArticleId) {
var url = '?id=' + selectedArticleId.value;
xmlHttpObject.open('GET', url);
xmlHttpObject.onreadystatechange = handleStateChange;
xmlHttpObject.send();
}
function handleStateChange() {
if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;
var result = document.getElementById("errorDiv");
result.innerHTML = response;
}
}
</script>
<form method="POST" action="ConfController" >
<table>
<h1>PC Konfigurator GO Inc.</h1>
<tr>
<td><br><br></td>
</tr>
<tr>
<td>Welchen Prozessor wollen Sie haben?:</td>
<td><select name="cpuId" onchange="checkArticle(this)">
<%
for (Article article : ctrl.getCertainArticles("CPU")) {
out.print("<option value=\"" + article.getId() + "\">" + article.getName() + "</option>");
}
%>
</select>
</td>
</tr>
...
控制器看起来像这样:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
int id = Integer.parseInt(req.getQueryString().split("=")[1]);
if (findArticle(id).getCapacity() < 1) {
resp.getWriter().write("<p><font color=\"red\">Leider ist dieser Prozessor nicht mehr verfügbar.</font></p>");
} else {
resp.getWriter().write("");
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
但是一旦我在下拉列表中选择了另一个项目,那么这就发生了......
我的意思是至少id是对的。 它只是我无法工作的愚蠢的AJAX。
答案 0 :(得分:1)
在您的代码中,您没有为AJAX请求指定控制器。这就是您使用AJAX显示响应和响应的原因。
在控制台中,您还可以通过将鼠标悬停在 Error accessing: http://www.google.com/search?q=
上来查看被称为AJAX请求的完整网址。
?id=2
在上面的代码中,将 function checkArticle(selectedArticleId) {
var url = 'myController?id=' + selectedArticleId.value;
xmlHttpObject.open('GET', url);
xmlHttpObject.onreadystatechange = handleStateChange;
xmlHttpObject.send();
}
替换为指向servlet的实际控制器名称。