1

基本的なCRUDを作成しています。フォームの再作成を除いて、すべて正常に機能します。これが私がしていることの詳細です。

全社員一覧を表示しています。いくつかのリンクがあります新規追加。そして、各従業員で編集および削除します。[新規追加]または[編集]で、jquery Colorboxにデータを入力し、フォームをロードします。これが私のコントローラーメソッドにヒットするリンクです。

<a 
    href="<?php echo site_url('employees/form/'.$employee['id']);?>" 
    id="popUpEditFormTrigger" 
    return="<?php echo site_url('employees/entries'); ?>"
>Add New</a>

あなたがここで見ることができるように、私はフォームをロードするためにコントローラーメソッドを打っています。これは正常に機能します。カラーボックスform.jsにいくつかのコードがあります。

var dataString = $('#updateForm').serialize();
var url = $('#updateForm').attr('url');
$.ajax({
    type: "POST",
    url: url,
    data: dataString,
    success: function() {                
        $.fn.colorbox.close();                
    }
}); 
return false;

ajaxが成功すると、カラーボックスが閉じます。falseを返すと、リストビューがさらに進んでから先に進むのを防ぎます

return="<?php echo site_url('employees/entries'); ?>"

が実行され、テーブルのエントリが更新されます。

コントローラ

public function submit()
{
    $this->load->library('form_validation');

    $this->form_validation->set_rules('name',' Employee Name'.'trim|required');
    $this->form_validation->set_rules('salary',' Salary'.'trim|required');
    $this->form_validation->set_rules('description',' Description'.'trim|required');

    if($this->form_validation->run()){
        $data['name']           =   $post['name'];
        $data['salary']         =   $post['salary'];
        $data['description']    =   $post['description'];

        $result =   $this->employeesModel->insertEmployee($data);
    }else{
        $this->load->view('employee_form');
    }
}

問題 :

問題は、ユーザー検証エラーを表示できるように、カラーボックスにフォームを再入力したいということです。ただし、挿入が実行されたか検証が失敗したかに関係なく、カラーボックスは常に閉じています。検証が失敗した場合、カラーボックスにフォームに再度入力し、ハイパーリンク属性がsite_url('employees /entries')に戻らないようにします。どうやってやるの?JQueryでこれを処理できると確信していますが、方法がわかりません。提案が必要です。

4

2 に答える 2

0

ねえ、私はAjaxを知りませんが、アプリケーションにJSでカラーボックスを使用しています。私も同じ目的でのみ使用しています。

このリンクcolorbox.jsを呼び出すことから、ビューファイルにファイルを含めます。Add New

<a href="javascript:add_new('<?php echo $employee['id']  ?>')">Add new</a>

ユーザーがこのリンクをクリックすると、ファイルの最後に書き込む必要のあるJS関数が呼び出されます。

function show_channels(employee_id) { 

$.colorbox({href:"<?php echo ROOT_FOLDER ?>/controller_name/show_channels/" + employee_id,iframe:true,width:'515px',height:'374px'});
}

これで、上記のjavascript関数で指定したURLがカラーボックスに読み込まれます。

次に、データを処理するためのコントローラー関数を作成する必要があります。

public function submit()
{
$this->load->library('form_validation');

$this->form_validation->set_rules('name',' Employee Name'.'trim|required');
$this->form_validation->set_rules('salary',' Salary'.'trim|required');
$this->form_validation->set_rules('description',' Description'.'trim|required');

if($this->form_validation->run()){
    $data['name']           =   $post['name'];
    $data['salary']         =   $post['salary'];
    $data['description']    =   $post['description'];

    $result =   $this->employeesModel->insertEmployee($data);
}else{
    $this->load->view('employee_form');
}
}
于 2013-02-16T09:01:34.843 に答える
0

さて、ここで作成している概念が問題の原因です。検証エラーがない場合はフォームを閉じます。しかし、成功関数を使用しても、それは意味しません。からの出力に関係なく、 が正しく作成されたsuccess functionかどうかがわかります。だからあなたがする必要があるのは...ajax requestphp

PHP側:

if(ok){
$data['res'] = '1'; // which means that everything is ok
}
else{
$data['res'] = '0'; // which means that you had a problem with your validation.
}
// then pass the data in json format or any other format you need.

上記のコードは、アイデアを明確にするための単なるサンプルです。

次に重要なことは..あなたのjquery側で:

success: function(data) {                
        if(data.res == '1')
        {
            $.fn.colorbox.close();  
         }
        else
        { // display the errors
        }  
    }

したがって、この成功関数は、ajax requestが正常に作成されたことを示します。その中で、検証がOKかどうかを確認できます。

于 2013-02-16T11:14:24.250 に答える