Codeigniter当服务器端验证失败时,在JQuery Colorbox中重新填充表单

时间:2013-02-16 07:58:46

标签: jquery codeigniter popup

我正在创建一个基本的CRUD。除了重新填充之外,一切正常。这是我正在做的细节。

我正在显示所有员工的列表。有一些链接添加新的。并为每位员工编辑和删除。现在在Add New或Edit i上填充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成功时,它会关闭颜色框。 return 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');
    }
}

问题:

问题是我想在colorbox中重新填充表单,以便我可以显示用户验证错误。但是无论是执行插入还是验证失败,颜色框始终会关闭。我想如果验证失败在colorbox中再次填充表单并阻止超链接属性返回到site_url('employees / entries')。我怎样才能做到这一点?我相信JQuery可以处理这个,但我不知道如何。建议要求。

2 个答案:

答案 0 :(得分:0)

嘿,我不知道Ajax,但我正在使用带有JS的colorbox作为我的应用程序。我也只是出于同样的目的使用它。

在视图文件中加入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'});
}

现在,colorbox将加载我在上面的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');
}
}

答案 1 :(得分:0)

好的,你在这里做的概念是造成这个问题的原因。如果没有验证错误,您想要关闭表单。但使用成功函数并不意味着。无论success function的输出如何,ajax request都会告知php是否正确无误。所以你需要做的是......

在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已成功完成。所以在里面你可以检查验证是否正常。