0

Ajax がサーブレットを呼び出していない

私の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 レスポンスを返したことに気付いたはずです。これは本質的に「ページが見つかりません」というエラーです。

つまり、接頭辞を付けて、ドメイン相対サーブレット URL を指定しました/。JSP が で開かれていると想像してください。実際には に送信する必要があるのにhttp://localhost:8080/context/login.jsp、 のサーブレット URL が/LoginServletHTTP リクエストをに送信します。http://localhost:8080/LoginServlethttp://localhost:8080/context/LoginServlet

それに応じて修正します。

url: "LoginServlet"

具体的な問題とは関係ありませんが、この全体の設計は非常に奇妙で、実際には徐々に強化されていません。つまり、エンドユーザーが JS を無効にしている場合、フォーム全体がまったく機能しません。JavaScript を 1 行も使わずに、完全に機能するフォームから始める必要があります。

基本的なキックオフの例を次のように仮定します

<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 に答える