【问题标题】:Codeigniter - detect the sender of a requestCodeigniter - 检测请求的发送者
【发布时间】:2013-03-20 13:07:58
【问题描述】:

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

在大多数页面(即产品页面、类别页面)上,我想在侧边栏上显示购物车内容,当商品添加到购物车时会通过 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,以允许从那里更新购物车。

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

【问题讨论】:

    标签: ajax codeigniter shopping-cart


    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-12
      • 2016-04-14
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多