2012-01-15 5 views
0

私はPHP ZendフレームワークとjQuery ajaxを使用して、jsonデータフォーマットを使用してフォームを送信し検証しています。 PHPはうまく動作し、ajaxもうまく動作します。唯一の問題は、フォームに複数の無効な入力がある場合(例:nameとemailが両方とも無効)、ajaxはerror:function()の部分を実行することです。ここでPHPでのajaxフォームの検証

は、Ajaxコードです:

.ajax({ 
     type:'POST', 
     url:'processForm.php', 
     dataType:'json', 
     data:str, 
     success:function(data){ 
      //do something when ajax call is complete 
      //setup variables 
      switch (data.internal_code){ 
      case 0: 

       $('#NameError').html(data.msg0); 

      break; 

      case 1: 

       $('#EmailError').html(data.msg1); 

      break; 

      case 2:   
       $('#TextError').html(data.msg2); 


      break; 

      case 3: 
       $('#contactForm').fadeOut(2000); 
       $('#successMessage').fadeIn(2000); 
       $('#successMessage').fadeOut(4000); 

       break; 
      } 

     }, 

     error:function(data){ 

      alert ("ajax did not work"); 

     } 

私はこのエラーを修正する方法を教えてください。

答えて

0

あなたはerrorコールバック内の内容を見て、何が起こっているのかを判断する必要があります。あるいは、WebkitインスペクタまたはFirebugを開き、サーバから戻ってくるものを見てください。

あなたのリクエストが有効な入力または入力が1つのエラーで機能し、2つの無効な入力に対してエラーコールバックを受け取った場合、サーバーがクラッシュして500を返す可能性があります。サーバーからの応答を見ることなく、より多くを助けるために。

+0

を行い、私はそれをやった、これはサーバーに2つの無効な入力のために正しいとする、返信するものです。 {"code":200、 "msg": "No number"、 "internal_code":0} {"code":200、 "msg1": "有効なメールをお願いします"、 "internal_code":1} – user843681

0

結果が1組のアクションだけであるため、switch文を使用して複数のフォームをチェックすることはできません。

それを行うための通常の方法は、明示的に、より意味のある結果を与えるために、サーバー上であなたのJSONを符号化することである。

if(data.internal_code_0){ 
    // do something 
    error++; 
};  

if(data.internal_code_1){ 
    // do something else 
    error++; 
}; 

// then at the end of the field processing 

if(error == 0) { 
    // reset form field states and button states 
    // no need to submit form again - it has already been done! 
}; 

あなたは、私が明示的data.internal_code_0を使用していますここを参照してください、実際にそれを価値どのような問題ではありません。それが設定されているかどうかではなく、クライアント側で複数のエラーを扱うことができます。ìfを使用してください。

また、エラーの数をカウントして、処理の最後にすべてのフィールドが合格かどうかを知るようにします。 PHP側で

この

if(!isset($_POST['inputFieldHTMLName'])) 
{ 
    // do something 
} 
else 
{ 
$errors['internal_code_0'] = 'you forgot to enter a value '; 
}; 

// ... check other fields 

if (count($errors, 1)>0) 
{ 
echo json_encode($errors); 
} 
else 
{ 
    // form is good. Continue with processing 

};