2013-10-15 114 views
0

我需要检查用户名是否存在。如果存在,我增加一个变量“form_error”。 如果“form_errors”> 0,那么我停止返回false的代码。JQuery表单验证与AJAX

但是,当我做了一个Ajax调用,我不能增加这个变量。可能是范围/可见性问题?

所以,我对用户名错误的情况下,我的form_errors将永远0和形式提交...

我怎么能增加与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,因为如果错误> 0,那么在它之前使用'return false'。如果在浏览器中调试什么结果会更好。 – Admit

+0

可能重复的[如何返回AJAX响应文本?](http://stackoverflow.com/questions/1225667/how-to-return-ajax-response-text) – Quentin

回答

3

$就功能是异步执行完成的功能之前,所以将继续

if (form_errors > 0) { 
    return false; 
} 

执行。

+0

实际上,添加“async:false”做了招。我在复制和粘贴过程中发生了错误,更改了最后一段代码。当然,首先我检查是否有错误,console.log他们和AFTER我“返回false”。这只是一个错字错误:)谢谢你的指示“异步”;) – 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和additional-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(); 
    } 
});