登録フォームを設置しています。このフォームには、検証のためにテストされている 7 つのフィールドがあります。そのうちの 2 つは特別な検証があります。このクラスに email_string を送信する PHP クラスへの Ajax 呼び出しがあり、そのような電子メールがデータベースに既に存在するかどうかをテストします (重複を回避します)。
params = {};
params['source'] = 'checkEMail';
params['email'] = email
$.ajax({
type: 'POST',
url : 'some_class.php',
data : params,
success: function(msg)
{
if(msg > 0) /* email exists */
is_error = true;
}
});
そして私のPHPクラスでは、次のようなものを手に入れました:
$final = mysql_fetch_assoc(foo);
echo ($final) ? 1 : 0;
私はデータをテストしていましたが、実際には、電子メールが存在する場合は「1」を取得し、存在しない場合は「0」を取得します。
面白いことに、このスニペットは、このフォームに他のエラー (ユーザー名が空の場合など) がある限り問題なく機能します。「is_error」はブール値で、スクリプトの開始時に false に設定され、1 つの検証が失敗すると true になります。そして、最終的に、私はこれを得ました:
if(is_error)
{
error.show();
error.empty().append('some html foo');
}
else
{
$('form').submit();
error.empty().hide();
}
では、is_error が true に設定されているにもかかわらず、フォームが送信されるのはどうしてでしょうか? 私が考えることができる唯一の理由は、「is_error」がテストされる前にフォームが送信されているということですが、フォームの送信はスクリプトの一番下にあります。
ああ、私はそれをこのように呼んでいます:
<script type="text/javascript">
$("#reg_submit").click(function(event) {
event.preventDefault();
checkReg();
});
</script>