Reputation: 1274
I am using javascript in client side and node.js in server side, Actually i have tried to make a remote validation for input fields, result must be boolean and it should be based on the server call, My code as follows,
jQuery.validator.addMethod("remoteValidation", function(value, element) {
var accountName = $("#accountName").val();
var accountType = $("#accountType").val();
var valid = this.Validation(accountType,accountName);
//returning undefined becoz return statement executing before server side execution
return valid;
}, "Entered email or username already exists");
this.validation = function(accountType,accountName,cb){
var valid =null;
ss.rpc('AccountsManagement.userNameChecker',accountType,accountName,function(res) {
// res will return boolean
valid = res;
});
//valid is null becoz this line is executing before valid = res line.
return valid;
};
my server side code:
services.imAccountsService.getAllImAccounts(accountType,accountName,
function(err,result){
if(err){
return;
}
if(result == null){
res(true);
}
else{
res(false);
}
});
My problem is async execution, how to make code synschronous in this situation..
Upvotes: 2
Views: 893
Reputation: 1274
Added function in the jquery validation method.
if(param.type === "rpc"){
var args = param.data.remoteArgs();
ss.rpc(param.url, args, function(response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
var valid = response === true;
if ( valid ) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
} else {
var errors = {};
var message = response || validator.defaultMessage( element, "remote" );
errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
});
}
It works fine ....thanks for all...
Upvotes: 1
Reputation: 584
You will have to wait till the value of res is available. See if the below code works.
jQuery.validator.addMethod("remoteValidation", function(value, element) {
var accountName = $("#accountName").val();
var accountType = $("#accountType").val();
var valid = this.Validation(accountType,accountName);
//returning undefined becoz return statement executing before server side execution
return valid;
}, "Entered email or username already exists");
this.validation = function(accountType,accountName,cb){
var valid =null;
ss.rpc('AccountsManagement.userNameChecker',accountType,accountName,function(res) {
// res will return boolean
while(res <> null)
{
window.setInterval(function(){waitFunc()}, 1000);
}
valid = res;
});
//valid is null becoz this line is executing before valid = res line.
return valid;
};
function waitFunc()
{
//do nothing
}
Upvotes: 0