jquery - переменная javascript, не содержащая значения - PullRequest
1 голос
/ 15 декабря 2009

Я использую этот код для отправки формы в скрипт php:

var valid = 'true';
$(document).ready(function(){
  $("#contact").submit(function(){
    $.post("process.php",
      $("#contact").serialize(),
      function(data){
        if(data.email_check == 'invalid'){
          valid = 'false'; //<---not set!
          $("#email1").addClass('missing'); 
          $("#message_ajax")
            .html("<div class='errorMessage'>Sorry is NOT a valid e-mail address. Try again.</div>");
        } else {
          $("#message_ajax")
            .html("<div class='errorMessage'>YES! this is A valid e-mail address. DO NOT Try again.</div>");
        }
      }, "json"
    );

    if(valid == 'true'){
      $("#contact").hide();
    }

    return false;
  });
});

Я знаю, что скрипт возвращает недопустимое значение, потому что div и css обновляются, как и ожидалось, но переменная 'valid' никогда не устанавливается в 'false'. Подумав, что это проблема сферы действия, я переместил декларацию и заявление if без радости.

Возможная связанная проблема - я использую firebug для пошагового выполнения кода, но он останавливается на моей точке останова только при первом выполнении кода и никогда больше, но я могу отправить форму любое количество раз, и это всегда отвечает, как ожидается - действительный или недействительный. Как видите, я очень новичок в jQuery.

1 Ответ

6 голосов
/ 15 декабря 2009

Здесь вы смешиваете синхронный и асинхронный код.

if(valid == 'true'){
    $("#contact").hide();
}       

return false;

Этот код ^^^ выполняется до того, как будет вызван обратный вызов function(data).

В основном то, что происходит, это:

  • $. Сообщение проходит
  • если (valid == 'true') оценивается
  • .submit () функция возвращает false
  • Функция обратного вызова (данные) называется
  • установлена ​​'действительная' переменная
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...