1

私は今朝からJquery Validation Engineと codeigniter で立ち往生しています。名前、電子メール、パスワードを含むフォームがあります...そして、これらすべてのフィールドをJqueryでチェックし、次にphpでチェックします。

ユーザーが既に使用されている電子メールを入力すると、ツールボックスにエラー メッセージが表示されますが、フォームはまだ送信されています... 電子メール フィールドを空のままにしておくと、送信されません。したがって、データベースをチェックインすると、後で適切なアクションを実行しないと思います(falseを返します...)

これは私の見解ではコードです:

    <?php $data_email_signup = array(
        'name'        => 'email_signup',
        'id'          => 'email_signup',
        validate[required,custom[email],ajax[ajaxEmailCall]]'
                        );
            echo form_input($data_email_signup); ?>
...
...

jQuery(document).ready(function(){
    jQuery("#form_signup").validationEngine({
        submitHandler: function(form) {
            form.submit();
        }
    });
});

jquery.validationEngine-fr.js私は持っています:

"ajaxEmailCall": {
     "url": "/.../ajaxValidateFieldEmail.php",
     "alertTextLoad": "* Please wait",
     "alertText": "* Email already used"
                },

私が持っているファイルajaxValidateFieldEmail.phpで:

<?php
$validateValue=$_POST['fieldValue'];
$validateId=$_POST['fieldId'];
$arrayToJs = array();
$arrayToJs[0] = $validateId;
$resultats=$connexion->query("SELECT ...");
$count = $resultats->rowCount();                
if($count == 0){        
    $arrayToJs[1] = true;
    echo json_encode($arrayToJs);
}
else {
    $arrayToJs[1] = false;
    echo json_encode($arrayToJs);
}
?>

Firebug は FALSE を返し、既に使用されている電子メールを入力すると、既に使用されている電子メールが表示れますが、フォームが検証される理由がわかりません。

誰にもアイデアがありますか?

4

4 に答える 4

1

jquery.validationEngine-fr.js のコードは問題ないようです。しかし、完全なフォーム送信を行っている場合は、別の方法で処理する必要があります。検証にフォームと同じアクションを実行させたくないため、検証目的でカスタム URL を使用します。成功したら、何らかの形で無限ループを実行していたため、検証エンジンを切り離します

$("#frmAddUser").validationEngine({ajaxFormValidation: true,
      ajaxFormValidationURL: '/users/validate',
      onAjaxFormComplete: function(status, form, json_response_from_server, options)  {
          if (status === true) {
             //validationengine falling into infinite loop
             form.validationEngine('detach');
             form.submit();
          }
      }
 });

これはフォーム検証であるため、サーバーからの応答は単純な ajax 検証とは異なる必要があり、次のような配列の配列である必要があります。

[[fieldId1, status1, message1], [fieldId2, status2, message2]/*optional*/]
于 2012-03-29T18:28:59.850 に答える
0

別の問題を探しているときに、これに出くわしました。jquery.validationEngine.js 内

_onSubmitEvent: function() {
            var form = $(this);
            var options = form.data('jqv');

            // validate each field (- skip field ajax validation, no necessary since we will perform an ajax form validation)

それがあなたの問題に当てはまるのか、それとも解決したのかはわかりませんが、そのコメントはあなたの問題に関連しているようです。

また、AJAX が jquery に役立つものを返していることを確認します。

幸運を。

于 2011-11-08T05:34:56.137 に答える
0

ValidationEngine の一部である onAjaxFormComplete 関数を使用する必要があります。ドキュメントには次のように記載されていることに注意してください。

ajax フォーム バリデータを使用する場合、実際の結果は関数 options.onAjaxFormComplete に非同期的に配信されることに注意してください。

その後、4 つの情報にアクセスできますが、本当に関心があるのはステータスとフォームだけです。

したがって、フォームに添付する最初のコードは次のようになります。

    jQuery(document).ready(function(){
        jQuery("#form_signup").validationEngine({
            onAjaxFormComplete: function(status,form) {
                if (status === true) {
                    form.submit();
                }
            }
        });
    });

これで、フォームは問題がない場合にのみ送信されます。

于 2012-03-14T13:03:48.737 に答える
0

あなたは基本的に、ここでの呼び出しの後に関係なく送信するように指示しています:

    **submitHandler: function(form) {

           form.submit();
      }**

コールバック関数でチェックを使用する必要がある場合があります

  function ajaxValidationCallback(status, form, json, options)
  {
 if (status === true) form.submit();
  } 

次に、次のように定義します。

                         jQuery(document).ready(function($){
                            $("#form_signup").validationEngine({
                                           ajaxFormValidation: true,
                                           ajaxFormValidationMethod: 'post',
                                           onAjaxFormComplete: ajaxValidationCallback 

                                   });
                                          });
于 2014-01-21T00:33:42.200 に答える