0

Ajax 没有调用 servlet

我的 web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.web.LoginServlet</servlet-class>
    </servlet> 
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
</web-app>

剧本:

//function to check name and comment field 
function checkCommentsForm(){
    if(userName.attr("value") && userPass.attr("value"))
    {
        alert("true returned");
        return true;
    }
    else
    {
        alert("fasle returned");
        return false;  
    }
}
//When form submitted
$("#formL").submit(function(){
    if(checkCommentsForm()){
        $.ajax({
            type:"POST",
            url:"/LoginServlet/",
            data:"user="+userName.val()+"&pass="+userPass.val(),
            success: function(msg) {$('#targetDiv').hide();$("#targetDiv").html ("<h3>" + msg + "</h3>").fadeIn("slow");
            }
        });
        alert('ppppppppppppppppp----------');
    }
    else 
        alert("Please fill UserName & Password!");
    return false;
    });
});

表格:

<div>
    <form id="formL" name="formL" method="post" onsubmit="return false;">
        <span class="style3"><strong>Enter Username &amp;
            Password to Login : </strong></span><br> <br> <span class="style1">Username :&nbsp;</span>&nbsp;
            <input name="user" id="user" type="text"> <br>
            <span class="style1">Password :</span>&nbsp;&nbsp; <input name="pass" id="pass" type="password"> <br>
            <input name="button" id="button" value="Submit" type="submit">
    </form>
</div>
<div id="targetDiv" style="display: none;"></div>

警报如下:

**The servlet are working but through ajax it was not called any clue what happen ?**
4

1 回答 1

2

阅读 Web 浏览器开发工具集的“网络”部分中的 HTTP 流量监视器(在 Chrome/IE9/Firefox 中按 F12)。您应该已经注意到 ajax 请求返回了 HTTP 404 响应,该响应本质上是“找不到页面”错误。

您已经指定了一个域相关的 servlet URL,方法是在其前面加上/. 想象一下,JSP 已经打开http://localhost:8080/context/login.jsp,然后一个 servlet URL/LoginServlet会将 HTTP 请求发送到http://localhost:8080/LoginServlet,而您确实需要将它发送到http://localhost:8080/context/LoginServlet

相应地修复它:

url: "LoginServlet"

与具体问题无关,整个设计很奇怪,并没有真正逐步增强。即当最终用户禁用 JS 时,整个表单根本不起作用。您应该始终从没有任何单行 JavaScript 的完整工作表单开始。

假设一个基本的启动示例是这样的

<form id="login" action="login" method="post">
    <input type="text" name="user" />
    <input type="password" name="pass" />
    <input type="submit" value="Login" />
    <span id="message">${message}</span>
</form>

那么你可以以一种相当可重用的方式进行增强,如下所示:

$("#login").submit(function() {
    var $form = $(this);
    $.post($form.attr("action"), $form.serialize(), function(data) {
        // ...
    });
    return false;
});

请注意,$.serialize()以适当的方式透明地序列化所有表单数据。您根本没有对用户/传递请求参数进行 URL 编码,当最终用户在用户名和/或密码中使用 URL 不安全的特殊字符时,无论如何都会破坏表单提交。

也可以看看:

于 2013-02-24T12:14:45.160 回答