0

私はコードイグナイターが初めてなので、簡単な質問で申し訳ありません。

ajax プロセスに対して formvalidator を実行したいと考えています。検証エラーを JSON として返すにはどうすればよいですか? これを行うより良い方法はありますか?

ありがとう

4

1 に答える 1

0

あなたは自分が何をしているのかを実際に述べていません。厄介な保存/送信ボタンがないように、ajaxを使用してデータを保存するフォームがあると仮定します。また、名前と値のペアとしてポスト変数としてフォーム要素を ajax ハンドラーに送信する、ある種の .change() ハンドラーがあると推測しています。あなたが遭遇する問題は、データに対してフォームバリデーターを実行すると、常に失敗することです。フォームバリデーターはそのフォームのすべてのフィールドを必要とするため、一度に 1 つのデータしか送信しません。

通常、コード イグナイターのサンプル コードでは、'run' メソッドが成功するかどうかを確認します。あなたの場合、それは常に失敗するので、実際には問題ではありません。チェックする必要はありません。ここにいくつかのサンプルコードのスニペットがあります

$this->form_validation->run('form');  // it is likely that the form won't validate, but thats ok.
$validation_error=form_error($field_name);
if($validation_error){
    $feedback = 'Field <strong>NOT</strong> saved.';

}else{
    // no errors, we can save.
    $this->my_model->set_field($id,$field_name,$field_value);
    $validation_error='&nbsp;';  // this is set so if the field was initially not validated, and it is later, the validation message goes away. 
    $validation_element = '#'.$field_name;
    $feedback = 'Field saved.';
}

....

echo json_encode(array('feedback'=>$feedback,'validation_element'=>'#'.$field_name,'validation_error'=>$validation_error));
break;

私のスニペットでは、json オブジェクトが ajax ポストに返されます。jquery ajax の投稿では、成功ハンドラーにこのコード スニペットがあります。

try{
    var json = $.parseJSON(data);

    if(typeof(json.container)==='string'){
        var container=json.container;
    }
    if(typeof(json.html)==='string'){
        var con = $(container);
        $(con).html(json.html);
    }
    if(typeof(json.feedback)==='string'){
        display_feedback(json.feedback);}

    if(typeof(json.validation_element) ==='string'){
        // assumes that if a validation_element object is returned, it has a paired validation_error element.
        $(json.validation_element).closest('.col_b').nextAll('.validation_error').first().html(json.validation_error);
    }

}
catch(err){
    display_feedback(err);
}

私のフォームでは、次の 3 つの列の形式があります。

<div class='col_a'>label</div>
<div class='col_b' >input, id = field_name  </div>
<div class='col_c validation_error'>validation text</div>

うまくいけば、それはあなたにとって意味があります。

于 2012-06-30T13:56:10.983 に答える