Codeigniter添加到收藏夹ajax逻辑建议

时间:2012-07-05 08:34:58

标签: jquery ajax codeigniter

我有一个问题,我真的无法解决。

我正在制作一个用于保存到收藏夹功能的ajax insiter,它工作正常。

但是因为它不是一种形式,所以在逻辑上有点迷失。

我想要做的是当用户点击按钮时它会变黄并且如果用户再次匆匆而保持黄色它会从收藏夹中删除并更改回蓝色。

我不希望任何人为我写这个,我只需要一些提示或逻辑建议。

这是我的代码

jquery的

//save to favorites
$('.favorite').on('click', function(e){
    e.preventDefault();
    var data = [],
    newclass = 'btn-warning',
    oldcalss = 'btn-primary',
    fav = $(this);
    favId = fav.attr('id'),

    $.ajax({
        type: "POST",
        url: base_url + 'ajax/add_favorite/' + favId,
        success: function(result)
        {
            fav.removeClass(oldcalss)
            .addClass(newclass);    
        }
    });

});

模型

function insert_favorite($id)
{
    $favData = array(
        'job_id' => $id,
        'uid' => $this->session->userdata('user_id')
    );

    $this->db->insert('job_favorites', $favData);
}

html

<?php if($this->ion_auth->logged_in()): ?>
 <a href="#" id="<?php echo $res->info_id; ?>" class="favorite btn btn-primary btn-mini" title="Add to favorite"><i class="icon-star icon-white"></i></a>
<?php endif; ?>

1 个答案:

答案 0 :(得分:1)

您需要检查作业ID是否在数据库中并将值返回给AJAX函数:

function insert_favorite($id)
{

    if (!is_numeric($id)) {
        exit;
    }

    $this->db->where('job_id', $id);
    $this->db->where('uid', $this->session->userdata('user_id'));
    $row = $this->db->get('job_favorites')->row();

    //There is a previous value
    if ($row) {
        $this->db->where('job_id', $row->id);
        $this->db->where('uid', $this->session->userdata('user_id'));           
        $this->db->delete('job_favorites');
        echo json_encode(array('result' => 'exists'));
    }
    else {
        $favData = array(
            'job_id' => $id,
            'uid' => $this->session->userdata('user_id')
         );

        $this->db->insert('job_favorites', $favData);
        echo json_encode(array('result' => 'new'));
    }
}

在回调函数中,根据结果变量更改按钮的颜色。

我建议将db调用和逻辑移动到模型中,并在控制器中保留尽可能少的逻辑。