Extjs4 - 远程验证

时间:2011-11-14 11:25:22

标签: extjs extjs4 validation

我想要一个文本字段的远程验证器。我的PHP返回true / false值。我尝试过这样的事情:

{
   xtype: 'textfield',
   fieldLabel: 'Field',
   allowBlank: false,
   validator : function(value) {
      Ext.Ajax.request({
      url: 'psc/validate',
      params: { psc: value },
      success: function(response){
       return response.responseText                             
      }
      });
   });
}

问题是ajax请求是异步的,验证器给出“未定义的值”错误。有没有回调?所以我默认会返回false,并且一旦ajax调用完成就使textfield有效。

我试图谷歌进行extjs远程验证,但没有太多关于它。

有人帮忙或建议?谢谢。

2 个答案:

答案 0 :(得分:11)

也许你不应该使用验证器,然后在文本字段的变化上添加一个列表器,并使用markInvalid和clearInvalid方法来显示验证。

{
   xtype: 'textfield',
   fieldLabel: 'Field',
   allowBlank: false,
   textValid: false,
   validator: function(){
       return this.textValid;
   },
   listeners : {
     'change': function(textfield,newValue,oldValue) {
        Ext.Ajax.request({
          url: 'psc/validate',
          params: { psc: value },
          scope: textfield,
          success: function(response){
             if (response.responseText){
               this.clearInvalid();
               this.textValid = true;
             } else {
               this.markInvalid('field is not valid');
               this.textValid = false;
             }                             
          }
        });
      }       
   }
}

我没有尝试过,但可以为你的方法工作

编辑我对代码进行了一些修改以包含验证器..

答案 1 :(得分:0)



{
 fieldLabel : 'Username',
 name : 'username',
 allowBlank : false,
 validFlag : true,
 validator : function() {
  return this.validFlag;
 },
 listeners : {
  'change' : function(textfield, newValue, oldValue) {
   var me = this;
   Ext.Ajax.request({
    url : 'rest/users?action=validate&username=' + newValue,
    success : function(response) {
     // Ausuming responseText is {"valid" : true}
     me.validFlag = Ext.decode(response.responseText).valid ? true : 'The username is duplicated!';
     me.validate();
    }
   });
  }
 }
}




我测试的这个html代码(extjs版本是5.0),没关系,它来自TonyTuan的博客, 所有这些你可以看到这个链接: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html