JSP无法使用webservlet doGet使AJAX工作

时间:2018-05-07 22:17:11

标签: javascript java html ajax jsp

我的问题是,我必须实现一个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&uuml;gbar.</font></p>");
        } else {
            resp.getWriter().write("");
        }
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

这是网站在启动时的样子。到现在为止还挺好。 enter image description here

但是一旦我在下拉列表中选择了另一个项目,那么这就发生了...... enter image description here

我的意思是至少id是对的。 它只是我无法工作的愚蠢的AJAX。

1 个答案:

答案 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的实际控制器名称。