jquery とサーブレットを使用する単純なフォームがあります。jquery はサーブレットに対して ajax 呼び出しを行い、サーブレットはサーバー側でいくつかの計算を行い、jQuery を介して同じページに結果を表示します。同じページにとどまり、結果を動的に表示したいので、フォームがデフォルトの送信を行う(そしてサーブレットに移動する)ことは望ましくありません。それはまさに私が望むように動作します:
HTML:
<form name="form1" action="FormHandler1" method="POST" class="stats-form">
<input class="stats-input" id="number0" type="text" name="number0">
<input id="number1" type="text" name="number1">
<input id="number2" type="text" name="number2">
<input id="number3" type="text" name="number3">
<input type="submit" value="Calculate" class="calculate-stats" name="stats-submit">
</form>
jQuery:
form.submit (function(event) {
$.ajax({
type: form.attr("method"), // use method specified in form attributes
url: form.attr("action"), // use action specified in form attributes (servlet)
data: form.serialize(), // encodes set of form elements as string for submission
success: function(data) {
// get response form servlet and display on page via jquery
}
});
event.preventDefault(); // stop form from redirecting to java servlet page
});
ここで、サーブレットは 10 進数で計算を行うことを想定しているため、フォームの検証を追加したいと考えました。ユーザーは数字のみを入力でき、他の文字は入力できません。これを行うために、人気のあるjQuery Validationプラグインを採用しました。
検証は期待どおりに機能しますが、サーブレットへの ajax 呼び出しを行うには、上記の jQuery submit メソッドの代わりに、jQuery Validation が提供する submitHandler を使用する必要があります。検証 submitHandler を使用すると、送信時にフォームのデフォルト アクションが実行され、同じページにとどまる代わりにサーブレット ページに移動して、jQuery で動的に結果を表示します。以前のようなイベントではなく、formHandler にフォームを渡す必要がありました。これにより、デフォルトのアクションを防ぐことができました。唯一の選択肢は false を返すことですが、うまくいきません。私は過去 2 日間、これを理解しようとしてきましたが、Google-fu をほとんど使い果たしました。これが私に悲しみを与える新しいコードです:
form.validate({
rules: {
number0: ruleSet,
number1: ruleSet,
number2: ruleSet,
number3: ruleSet,
},
submitHandler: function (form) {
$.ajax({
type: "POST",
url: form.attr("action"),
data: form.serialize(),
success: function () {
// get response from servlet and display on page via jQuery
}
});
return false; // required to block normal submit ajax used
}
});
このきちんとした jQuery フォーム検証を使用したいのですが、独自の jQuery 検証をゼロから作成して、既に動作しているフォーム送信メソッドを使用できるようにすることもできます。