Вот моя форма (она содержит только поля, необходимые для этого упражнения, Есть на самом деле 20 полей ввода):JQuery ValidationEngine проблема проверки функции
<form id="reg_form" action="/register_submit" method="post">
<fieldset>
<ul class="form-list">
<li>
<div style="width:500">
<label for="Username" class="required">Username (5 characters minimum,<br />Only Letters, Numbers, '~', '%', '.', ':', '-' and '_' allowed)<em>*</em></label><br />
<div class="input-box">
<input type="text" name="Username" id="Username" value="{embed:Username}" title="Username" class="validate[required,minSize[5],custom[onlyLetNumSpec]] register_input" />
</div>
</div>
</li>
<li id="register-customer-password">
<div style="width:500">
<label for="Password" class="required">Password (5 characters minimum,<br />Only Letters, Numbers, '~', '%', '.', ':', '-' and '_' allowed)<em>*</em></label><br />
<div class="input-box">
<input type="Password" name="Password" id="Password" title="Password" class="validate[required,minSize[5],custom[onlyLetNumSpec]] register_input" />
</div>
</div>
<br />
<div style="width:500">
<label for="confirm_password" class="required">Confirm Password<em>*</em></label>
<div class="input-box">
<input type="password" name="confirm_password" title="Confirm Password" id="confirm_password" class="validate[required,custom[onlyLetNumSpec],equals[Password],funcCall[checkUserPass]] register_input" />
</div>
</div>
<div class="clear"></div>
</li>
</ul>
<div class="button-set">
<button class="button button-login" title="Create Account" type="submit">
<span>
<span>Create Account</span>
</span>
</button>
</div>
</fieldset>
</form>
Теперь это функция checkUserPass, что называется на проверки после того, как поле формы confirm_password заполнена и вышла:
function checkUserPass(field, rules, i, options){
$.ajax({type:'POST',
url: '/json_api/ParticipantSelectByUser/',
data: {"Username":$("#Username").val(), "Password":$("#Password").val()},
dataType: 'json',
success: checkUserPassResult,
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
} // error
});
}
function checkUserPassResult(data) {
if(data.result.ParticipantID > 0) {
/*--- There is already a user with this combination ---*/
return options.allrules.checkUserPass.alertText;
} // if(data.result)
}
Я ЗНАТЬ что есть data.result возвращается, и как таковой, уже есть пользователь с этим пользователем/PWD комбинации.
Тем не менее, сообщения о подтверждении не отображаются. Я полагаю, что я выполнил правильный способ проверки с помощью вызова функции. Я не могу использовать правило проверки ajax из-за необходимости передавать имя пользователя и пароль для вызова ajax. В чем проблема? Все мои другие проверки в этой форме работают очень хорошо.
Вот пользовательские правила, необходимые для вышеуказанных проверок:
"onlyLetNumSpec": {
// Good for database fields
"regex": /^[0-9a-zA-Z_-~%.:]+$/,
"alertText": "* Only Letters, Numbers, tilde(~), pct(%), period(.), colon(:), hyphen(-) and underscore(_) allowed"
},
"checkUserPass": {
"alertText": "* A User with the same Username and/or Password has been detected. Please change one of the entries."
}
Edit Note; Я обновил функцию checkUserPass, чтобы успешно выполнить еще один funstion.
Но переменная данных в функции успеха У данных есть данные. – MB34
Демонстрация вызова функции не сказала, чтобы вернуть true или false, только alertText. – MB34
Звонок ajax - асинхронный. Эта функция ничего не вернет, потому что она вызывает ajax и ничего больше. Вы должны будете вернуть false вне вызова ajax и работать с данными в новой функции. Может быть, эта ссылка поможет понять http://arshadinfo.wordpress.com/2008/05/25/what-is-the-difference-between-asynchronous-ajax-and-synchronous-request/ – Oliver