2011-11-14 15 views
8

मुझे टेक्स्टफील्ड के लिए रिमोट सत्यापनकर्ता चाहिए। मेरा PHP सच ​​/ गलत मान देता है। मैं कुछ इस तरह की कोशिश की है: कि ajax अनुरोध एसिंक्रोनस है और सत्यापनकर्ता देता है "मान परिभाषित नहीं" त्रुटिExtjs4 - रिमोट सत्यापन

{ 
    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 कॉल समाप्त होने के बाद टेक्स्टफील्ड को वैध बना दूंगा।

मैंने extjs दूरस्थ सत्यापन के लिए Google की कोशिश की है लेकिन इसके बारे में बहुत कुछ नहीं है।

कोई भी मदद या सुझाव? धन्यवाद।

उत्तर

11

शायद आपको सत्यापनकर्ता का उपयोग नहीं करना चाहिए, टेक्स्टफील्ड के लिए परिवर्तन पर एक सूचीकार जोड़ें और सत्यापन को प्रदर्शित करने के लिए विधियों को इंगित करें और स्पष्ट करें।

{ 
    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; 
      }        
      } 
     }); 
     }  
    } 
} 

मैं हेवन टी यह कोशिश की, लेकिन अपने aproach

संपादित मैं कोड में कुछ सुधार किए गए हैं सत्यापनकर्ता शामिल करने के लिए काम कर सकता था ..

+1

आपके उत्तर के लिए बहुत बहुत धन्यवाद। यह केवल टेक्स्टफील्ड में टाइप करते समय काम करता है। एक बार टेक्स्टफील्ड फोकस खो देता है जब टेक्स्टफील्ड हमेशा वैध के रूप में चिह्नित किया जाता है। मुझे डर है कि यह प्रपत्र सबमिट करने के लिए form.isValid() को भी हल नहीं करता है। – gotroch

+0

मैंने अपनी प्रतिक्रिया संपादित की है – nscrob

+2

धन्यवाद nscrob! आपने मेरा दिन बना दिया! – gotroch

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(); 
 
    } 
 
    }); 
 
    } 
 
} 
 
}

यह एचटीएमएल कोड मैंने परीक्षण किया (extjs संस्करण 5.0 है), ठीक है, यह टोनी टुआन से है लॉग, यह सब आप इस लिंक को देख सकते हैं: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html

संबंधित मुद्दे