2012-04-06 69 views
0

我想創建一個基於數據庫值的特殊郵政編碼驗證。因此,我對AJAX檢查值:ajax jquery表單驗證總是驗證錯誤

jQuery.validator.addMethod("validate_country_from", function(value, element) 
{ 
    $.ajax({ 
     type: "POST", 
     url: "ajax.php", 
     data: "action=validate_countryzip&direction=1&zip=" + 
     escape(document.getElementById("zip_from").value) + "&country=" + 
     escape(document.getElementById("country_from").value), 
     async: false 
    }).done(function(msg) 
    { 
     if(msg == "true") 
     { 
     return true; 
     } 
     else 
     { 
     return false; 
     } 
    }); 
}, addressError); 

而且我對這些規則的規則分配功能:

zip_from: { 
    required: true, 
    validate_country_from: true 
}, 
country_from: { 
    required: true, 
    validate_country_from: true 
}, 

Ajax請求工作正常,並且它完成同步的,返回的值也是正確的,但我的驗證仍然告訴我這兩個字段有錯誤。

我希望有人能幫助...

回答

0

謝謝你的答案,但我找到了原因:我的「完成」功能的值返回到AJAX請求採取行動,而不是驗證方法(匿名委託是偉大的,但有時候確實很混亂) 。

正確的版本是這樣的:

jQuery.validator.addMethod("validate_country_from", function(value, element) 
{ 
    var test = $.ajax({ 
     type: "POST", 
     url: "ajax.php", 
     data: "action=validate_countryzip&direction=1&zip=" + 
     escape(document.getElementById("zip_from").value) + "&country=" + 
     escape(document.getElementById("country_from").value), 
     async: false 
    }).done(function(msg) 
    { 
    }); 

    if(test.responseText == "true") 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
}, addressError); 

然而,這還不是最終的解決方案,因爲它沒有抓住任何錯誤等。

1

我覺得你有你的混合的jQuery AJAX方法一點點。我在get()之前見過done()之前使用過,但從未在ajax()之後使用過。嘗試

jQuery.validator.addMethod("validate_country_from", function(value, element) 
{ 
    $.ajax({ 
     type: "POST", 
     url: "ajax.php", 
     data: "action=validate_countryzip&direction=1&zip=" + 
     escape(document.getElementById("zip_from").value) + "&country=" + 
     escape(document.getElementById("country_from").value), 
     async: false, 
     success: function(msg){ 
      if(msg == "true") 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     }, 
     error: function(x, s, e){ 
      return false; 
     } 
    }); 
}, addressError);