Проблема с глобальной переменной
Есть кнопка, к которой прикручен click(), которым руководит глобальная переменная retVal. Присваиваю ей изначально false, в теле функции в случае успеха изменяю на true. Однако все равно retVal остается false. Помогите, пжл, разобраться
var retVal = false;
$('#submit_reg').click(function(){
$('.error').empty();
$.post('model/checkForm.php', form.serialize(), function(data){
if( data.login == 1 ) {$('#errorLogin').append('такой логин уже занят'); errorLogin = 1;}
else if( data.login == 2 ) {$('#errorLogin').append('некорректный логин'); errorLogin = 2; }
if( data.fname == 1 ) $('#errorFname').append('укажите имя');
if( data.pass == 1 ) {$('#errorPass').append('некорректный пароль');errorPass=1;}
if( data.cp == 1 ) {$('#errorCP').append('пароли не совпадают');errorCP = 1;}
if(data.success1) {alert('Cond'); retVal = true;}
//alert(retVal);
}, 'json');
//alert(retVal);
return retVal;
});
|
$.post - асинхронный, правильно? это значит, что как выполнение программы сразу же перейдет к следующей строке, не дожидаясь, пока отработает callback ajax запроса. то есть сразу же после того как пойдет запрос на сервер, программа выполнит строку return retVal;
в этот момент retVal действительно еще false, потому что не успела измениться. то есть все то, что вы хотите сделать в случае, когда retVal == true, нужно поместить внутрь функции обратного вызова ajax запроса. |
и вообще, надо отучаться обрабатывать отправку формы через событие щелчка по кнопке (а если я захочу форму отправить, нажав на Enter? низя?). click, это хорошо, но мы сабмитим форму, и для этого у нее есть специальное событие onsubmit.
$('#frmRegister').submit(function() {
// тут все наши проверки корректности введенных данных...
})
|
Спасибо.
в submit() надо использовать preventDefault() , а как это сделать если я собираюсь использовать в нем .post()? Я пробовал, если все плохо, тогда event.preventDefault(), но чето не покатило |
Спасибо огроменное
|
как-то так можно
$('#frmRegister').submit(function(e) {
var $frm = $(this);
e.preventDefault();
// тут все наши проверки корректности введенных данных
$.post('/register', $(this).serialize(), function(data) {
if (data.error) {
// что-то не так, останавливаемся, показываем ошибку
return false;
}
// данные корректны, можно продолжать
$frm.unbind().submit();
});
})
|
| Часовой пояс GMT +3, время: 01:01. |