2010-11-20 5 views
0

私は、CodeigniterのForm_Validationクラスを使用して、ajaxによるサブミット時にフィールドを検証するこのフォームを持っています。複数の要素を1つのjQuery Ajax呼び出しで塗りつぶす

<input type="text" name="field1" id="field1"> /> 
<span id="field1_error"></span> 
.... 
<input type="text" name="field2" id="field2"> /> 
<span id="field2_error"></span> 
... 
<input type="text" name="field3" id="field3"> /> 
<span id="field3_error"></span> 
<input type="submit" name="submit" id="btnPublish" /> 

送信時に、jQueryがCIの検証方法を呼び出します。 1つのAjaxコールでこれらの検証エラーを出力する最良の方法はどれですか?

+0

ここにAJAXを使用する利点は何ですか?私が正しく理解すれば、フォーム全体のサーバー側検証を使用しています。実際にページを送信し、フォームとともにサーバによって生成された検証出力を表示することとはどのように違いますか? – Krab

+0

理由は、ドロップダウンの選択に基づいて追加のフィールドを表示しているからです。私がページを正常に提出すると、それらのフィールドは失われます。私はこれを解決することが、上記よりもはるかに難しいと信じています。 –

答えて

2

たぶん、このアプローチは、あなたが検証を行い、(例えば)JSONを返しますサーバー側では...その多くのヒントのような完全なソリューションよりも..

あなたを助けることができる - $の進捗は/真であります偽 - 検証結果に応じて、および$エラーが配列である(名前、translated_error /または "")

部分PHP:

$res = array(
    'progress' => $progress, 
    'errors' => $errors 
); 
$jsonReturn = json_encode($res); 

//output result 
header('Content-Type: text/html; charset=utf-8');  
echo $jsonReturn; 

部分のjQuery:

var errorFields = $([]).add(field1_error).add(field2_error).add(field3_error), 
    mainFields = $([]).add(field1).add(field2).add(field3); 

$('#btnPublish').button().click(function(event){ 

    mainFields.removeClass('ui-state-error'); 
    errorFields.val();             

    $.ajax({ 
    type: 'POST', 
    url: your_url, 
    data: $('#your_form_id').serialize(), 
     async: false, 
     success: function (returned_value){ 
      var obj = $.parseJSON(returned_value); 

      if (obj.progress==true){ 
       alert('Validation successfull'); 

      }else{ 
       $.each(obj.errors, function(index, value) { 
        if (value!=""){ //it will skip those fields with no errors 
         $('#'+index).addClass(('ui-state-error')); 
         $('#'+index+'_error').val(value); 
        } 
       }); 

      }//end return ajax 

     }//end ajax 
    });   

}); 
+0

ありがとうございます。それは素晴らしい作品です!実際、JSONは多くの問題を解決しますが、私はセキュリティに懸念しています。 JSコードはエンドユーザーが利用できるため、他の処理(自動化されたリクエスト、大量のデータセットをリクエスト)を行うことができないようにする方法を教えてください。 –

+1

一般公開されているものを使用する場合は、常に懸念があります。 Ajax(JavaScript)はそのルールの例外ではありませんが、あなた自身に尋ねる必要があります。私は正しく使用していますか、より良いユーザーエクスペリエンスのためにユーザーに多くの自由を与えていますか?もちろん、インターネットにはあなたの懸念を避けるための良い例がたくさんあります。私はこれがあなたの質問に対する一般的な答えの一種であることを知っていますが、それは単に事実です。 セキュリティが手元にあります(コード)。それも欠けている。 – trix

関連する問題