1

これが私のphpファイルからの応答を取得しながら電子メールの重複をチェックするためのajaxリクエストを送信する私の関数です、失敗関数に該当せず、成功関数でのみ返されます、これのために私は result.responseText==を「false」にチェックしましたエラーポップアップメッセージも表示されますが、リクエストを中止しないで実行を続行し、データを保存します

    function email_check(userType) {
      //alert(userType);
   var extmail=   Ext.Ajax.request({
                  url: '<?= Extjs_renderer::ajaxurl();; ?>ajax/emailcheck',

                  success: function ( result, request ) {
                   if(result.responseText=='false'){
                       //Ext.Ajax.abort(extmail); tried
                       Ext.MessageBox.alert('Error', "email already exist");
                      // return false;

                    //Ext.getCmp('email').setValue(''); works

                   }else {
                       return true;
                   }


                    },
                    failure: function(response, options) {

                    Ext.MessageBox.alert('Error', "email already exist fail");

                    },
                  params: {merc_mem_tab:userType }
                  });

  }

これが私のajax.phpコードです

      function  emailcheck(){
    $get_email=$this->db->query("select * from customers where email='".$_REQUEST['merc_mem_tab']."'");
    if($get_email->num_rows==0){
        echo "true";
                    return true;
    }else{
        echo "false";
       // echo "{success: true}";
        return false;

    }

}

パネルハンドラーで応答を確認しようとしていますが、成功しませんでした

                         if('<?= $this->controller->name; ?>'=="customers"){
                        //alert(Ext.getCmp('email'))

                         if(email_check(Ext.getCmp('email').getValue()) == false){

                             return false;
                         }
                     }
4

2 に答える 2

1

ajax リクエストから戻ることはできません。これは asyncron であり、このコードif(email_check(Ext.getCmp('email').getValue()) == false)は応答を待ちません。また、失敗はImadが言ったように、誤った応答ではなく、httpの失敗のためだけです。応答 false をチェックするコードは正しかったですが、成功関数で保存メソッドを呼び出すことをお勧めします。

 function email_check(userType) {
      //alert(userType);
   var extmail=   Ext.Ajax.request({
                  url: '<?= Extjs_renderer::ajaxurl();; ?>ajax/emailcheck',
                  scope: this,
                  success: function ( result, request ) {
                   if(result.responseText=='false'){
                       Ext.MessageBox.alert('Error', "email already exist");
                       //do nothing else
                   }else {
                       this.saveData();    
                   }
                    },
                    failure: function(response, options) {
                    Ext.MessageBox.alert('Error', "Communication failed");
                    },
                  params: {merc_mem_tab:userType }
                  });

  }
于 2012-06-13T14:25:57.640 に答える
0

成功または失敗のコールバックの選択は、HTTP 応答コードに基づいています。したがって、失敗関数に到達したい場合は、次のことを行う必要があります。

function  emailcheck(){
    $get_email=$this->db->query("select * from customers where email='".$_REQUEST['merc_mem_tab']."'");
    if($get_email->num_rows==0){
        echo "true";
        return true;
    }else{
        throw new Exception("Error : Email Already Exists !");
    }
}

これはエラー 500 (処理されない例外) を引き起こし、ExtJS はそれを失敗応答として識別します。

于 2012-06-13T09:39:42.723 に答える