Ext Js ajax请求不能用于失败功能

时间:2012-06-13 09:19:50

标签: extjs extjs3 extjs-mvc

这是我的函数发送ajax请求检查电子邮件重复,同时从我的php文件获取响应,而不是失败函数它只返回成功函数,为此我检查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;
                         }
                     }

2 个答案:

答案 0 :(得分:1)

你不能从ajax请求返回,它是asyncron,而这段代码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 }
                  });

  }

答案 1 :(得分: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会将其识别为失败响应。