2016-10-17 5 views
0

jQuery Validatorプラグインを使用してニュースレターフォームの登録を検証しています。 ドキュメントと他の投稿に続いて、リモート検証メソッドを使用して、電子メールがデータベースに既に存在するかどうかを確認しています。jQuery Validatorプラグイン - 既存のメールアドレスを確認してください

この方法は機能します。既存のアドレスを入力すると、リモートメッセージが表示され、フォームを送信できなくなります。 しかし、電子メールアドレスを存在しないものに変更すると、リモートメッセージは削除されず、フォームを送信できなくなります。

何か不足していますか?ここで

は私のjQueryのです:

function my_action(){ 

    if (!empty($_POST['email'])) { 

     $emailArray = get_meta_values('email', 'my_post_type'); 

     if (in_array($emailArray, $_POST['email'])) { 
      echo "notexist"; 
     } 
     else { 
      echo 'exist'; 
     } 
    } 
} 
+0

'my_action()'関数の最後に 'exit;'を追加します。 –

+0

私の問題は解決していないようです。 \t 'my_action()'の最後に 'exit;'を追加するとどういうことがありますか? –

+0

これは、非同期要求であるため、スクリプトのフローを停止します。場合によっては必須ではありませんが、Wordpressを使用して開発する際には良い習慣です。 –

答えて

1

サーバー側の応答がなければなりません文書(https://jqueryvalidation.org/remote-method/

から:ここで

$("#form").validate({ 
    rules: { 
     email: { 
      required: true, 
      email: true, 
      remote: { 
       url: ajaxurl, 
       data: { 
        action: 'my_action' 
       }, 
       type: "post" 
      } 
     } 
    }, 

    messages: { 
     email: { 
      required: "This field is required.", 
      email: "Please enter a valid email address.", 
      remote: "This Email address is already in use." 
     } 
    }, 
}); 

は私のAjaxの機能(ワードプレス)があります有効な要素の "true"でなければならないJSON文字列。無効な要素の場合は "false"、undefined、またはnullにすることができます。デフォルトのエラーメッセージ

あなたのPHPはfalse/true(それぞれ)の代わりに "exist"と "notexist"という文字列を返しています。バリデータが理解できる値を返す必要があると思います。

+1

ありがとうございます。私は修正したし、期待どおりに動作するようだ。 (私のコードで唯一の誤りではなかった...例えば、私のことは恥ずかしがり、 'in_array'の2つの値を逆転させた –

関連する問題