2013-10-15 152 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(); 
    } 
});