【发布时间】:2018-10-17 19:03:13
【问题描述】:
我的问题是,我必须实现一个 AJAX 函数来显示所选商品是否缺货。但是,它没有显示我的错误消息,而是完全复制了该站点,我非常,我尝试过的任何方法似乎都不起作用。
我在代码背后的想法是,我有一个下拉表单,其中的操作设置为处理 doGet 和 doPost 的控制器 (Webservlet),以及显示给调用 AJAX 内容的 javascript 函数的 onchange 事件(你可以看到我对这些方面不是很有信心,我对它的了解还不够)。
相关的 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。
【问题讨论】:
标签: javascript java html ajax jsp