0

データベースの値に基づいて特別な郵便番号検証を作成しようとしています。したがって、私は 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
   }).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リクエストは正常に機能しており、同期が行われ、戻り値も正しいですが、検証では2つのフィールドにエラーがあることがわかります.

誰かが助けてくれることを願っています...

4

2 に答える 2

1

jQuery AJAXメソッドを少し混ぜていると思います。以前にdone()使用されたのを見たことがありますが、後で使用したことはありません。試すget()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);
于 2012-04-06T20:07:14.270 に答える
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);

ただし、エラーなどをキャッチしていないため、これは最終的な解決策ではありません。

于 2012-04-07T20:39:53.247 に答える