2013-10-15 2 views
0

Мне нужно проверить, существует ли имя пользователя. Если он существует, я увеличиваю переменную «form_error». Если «form_errors» is> 0, тогда я останавливаю код с возвратом false.Проверка формы JQuery с помощью ajax

Но, когда я делаю вызов Ajax, я не могу увеличить эту переменную. Вероятно, это проблема видимости/видимости?

Таким образом, в случае, если у меня есть ошибки на имени пользователя, мое form_errors будет навсегда-и форма представить ...

Как я могу увеличивать, что form_errors?

Спасибо всем, я оставляю кусок кода

$('#add-sponsor').submit(function() { 
var form_errors = 0; 
var username = ('#username').val(); 
$.ajax({ 
     url   : location.protocol + '//' + location.host + '/commands.php?action=check-username', 
     data  : { 
          username : username 
         }, 
     type  : 'post' 
    }).done(function (result) { 
     if (result=='false') { 
      $('#username').parent().addClass('has-error'); 
      $('#username').parent().removeClass('has-success'); 
      $('#username').parent().next('.help-block').text('Questo username già esiste'); 
      form_errors++; 
     } else { 
      $('#username').parent().addClass('has-success'); 
      $('#username').parent().removeClass('has-error'); 
      $('#username').parent().next('.help-block').text(''); 
     } 
    }); // ajax 


if (form_errors > 0) { 
    return false; 
} 

console.log(form_errors); // <- this is forever 0 
} 
+0

это было бы навсегда 0, потому что вы используете 'return false' перед ним, если ошибки> 0. Было бы лучше, если вы отлаживаете в своем браузере какой результат. – Admit

+0

Возможный дубликат [Как вернуть текст ответа AJAX?] (Http://stackoverflow.com/questions/1225667/how-to-return-ajax-response-text) – Quentin

ответ

3

$ .ajax функция асинхронная так будет продолжать выполнение

if (form_errors > 0) { 
    return false; 
} 

до сделано функция выполняется.

+0

Фактически, добавить «async: false» сделал трюк. Я сделал ошибку во время копирования и вставки, изменив последний фрагмент кода. Конечно, сначала я проверяю, есть ли ошибки, console.log их и ПОСЛЕ того, как «вернуть ложь». Это была только ошибка опечатки :) Спасибо за указание «async»;) – sineverba

1
if (form_errors > 0) { 
    return false; 
} 

console.log(form_errors); // <- this is forever 0 

Вы проверить здесь, если у вас есть ошибки, и если да, то вы вернетесь ... так, то console.log никогда не будет ударяться, если у вас нет ошибок. Может быть, просто использовать ...

if (form_errors > 0) { 
    console.log(form_errors); 
} 
0

Лучше всего было бы использовать какую-то переменную за пределами функции представить например

var isValid = false; 
$('#add-sponsor').submit(function() { 
    if(!isValid) 
    { 
     var form_errors = 0; 
     var username = ('#username').val(); 
     $.ajax({ 
       url   : location.protocol + '//' + location.host + '/commands.php?action=check-username', 
       data  : { username : username }, 
       type  : 'post' 
     }).done(function (result) { 
      if (result=='false') { 
       $('#username').parent().addClass('has-error'); 
       $('#username').parent().removeClass('has-success'); 
       $('#username').parent().next('.help-block').text('Questo username già esiste'); 
       isValid = false; 
       $('#add-sponsor').submit(); 
      } else { 
       $('#username').parent().addClass('has-success'); 
       $('#username').parent().removeClass('has-error'); 
       $('#username').parent().next('.help-block').text(''); 
       isValid = true; 
       $('#add-sponsor').submit(); 
      } 
     }); // ajax 

     return false; 
    } 
    return true; 
} 
0

Рассмотренный с помощью jQuery validation plugin? Вы можете настроить свою форму с помощью правила удаленной проверки, чтобы проверить, является ли имя пользователя истинным. Проверка jQuery позволяет реализовать ваши обратные вызовы в пределах submitHandler или invalidHandler.

Попробуйте этот код, если вы хотите его протестировать. Просто включите в свою страницу jquery.validate.js, а также дополнительные-methods.js.

var validator = jQuery("the-sponsor-form").validate({ 
    messages: { 
     username: { 
      remote: 'Questo username già esiste' 
     } 
    }, 
    rules: { 
     username: { 
      required: true, 
      remote: { 
       url: location.protocol + '//' + location.host + '/commands.php?action=check-username', 
       type: 'post', 
       data: { 
        username: $('#username').val(); 
       } 
      } 
     } 
    }, 
    submitHandler: function(form) { 
     alert("now submit the form"); 
     jQuery(form).submit(); 
    } 
}); 
Смежные вопросы