1

这是我的函数发送 ajax 请求以检查电子邮件重复,同时从我的 php 文件中获取响应,而不是失败函数,它仅在成功函数中返回,为此我已经检查 result.responseText== 为“false”,并且现在在这种情况下使用 else 条件它也显示错误弹出消息但不中止请求继续执行并保存数据

    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 请求中返回,它是异步的,这段代码if(email_check(Ext.getCmp('email').getValue()) == false)不会等待答案。正如 Imad 所说,失败也只是针对 http 失败而不是针对错误响应。您检查响应错误的代码是正确的,但我建议您在成功函数上调用保存方法。例如:

 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 回答