Проблема с глобальной переменной
Есть кнопка, к которой прикручен 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, время: 05:35. |