【问题标题】:JSP cannot get AJAX to work using webservlet doGetJSP 无法使用 webservlet doGet 让 AJAX 工作
【发布时间】: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&uuml;gbar.</font></p>");
        } else {
            resp.getWriter().write("");
        }
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

这是网站在启动时的样子。到目前为止,一切都很好。

但是,一旦我在下拉列表中选择另一个项目,就会发生这种情况......

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

【问题讨论】:

    标签: javascript java html ajax jsp


    【解决方案1】:

    在您的代码中,您没有为 AJAX 请求指定控制器。这就是您获得与使用 AJAX 显示的响应和响应相同的原因。

    在控制台中,您还可以通过将鼠标悬停在 ?id=2 上来查看被称为 AJAX 请求的完整 url。

     function checkArticle(selectedArticleId) {
        var url = 'myController?id=' + selectedArticleId.value;
        xmlHttpObject.open('GET', url);
        xmlHttpObject.onreadystatechange = handleStateChange;
        xmlHttpObject.send();
    }
    

    在上面的代码中,将myController 替换为指向您的servlet 的实际控制器名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 2017-12-12
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多