Codeigniter - 检测请求的发送者

时间:2013-03-20 13:07:58

标签: ajax codeigniter shopping-cart

我正在建立一个带购物车的商业网站。

在大多数页面上(即 - 产品页面,类别页面),我想在侧栏上显示购物车内容,当项目添加到购物车时,将通过AJAX更新。

在“显示购物车”页面上,我想显示内容的完整版本。

显然,使用相同的模型和功能来获取和/或更新购物车似乎是合乎逻辑的,但是根据调用者页面将数据发送到不同的视图(侧边栏或完整购物车)。

问题是,在购物车模型中,我如何检测请求的来源。

我以为我会检查请求是否来自AJAX,如下:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') // i.e - the request came as AJAX
{
    $this->load->view('cart_sidebar_view', $data);
}else{ /* not ajax */
    $data['main_content'] = 'cart_view';
    $this->load->view('includes/template', $data);
}

但这还不够好,因为我也希望在“展示车”页面上使用AJAX,以便从那里更新购物车。

那么,有没有办法在购物车模型中检测请求来自哪里?或者我是否必须在每个“添加到购物车”或“删除”按钮的隐藏表单字段中发送该信息?

1 个答案:

答案 0 :(得分:1)

有一种简单的方法。当您从显示购物车页面发送请求时,发送一个额外的变量。如果变量即将到来,则在控制器中检查此变量,如果变量未执行则调用逻辑。

if($this->input->is_ajax_request()) 
{
    $this->load->view('cart_sidebar_view', $data);
}else{
    if($this->input->post('another_variable')){
        // do something else
    }else{
        $data['main_content'] = 'cart_view';
        $this->load->view('includes/template', $data);
    }
}