在Codeigniter的每个页面上使用AJAX处理flashdata的优雅方式

时间:2016-03-04 08:31:37

标签: codeigniter

随着对CI的下一个请求擦除flashdata。需要在每个页面上调用AJAX的应用程序都会使flashdata无用。我通过在AJAX控制器方法的每个项目上运行keep_flashdata()来解决这个问题。

在我的特定用例中,每次加载页面时都会调用AJAX来从Web应用程序中提取通知。

有更优雅的方式来处理这个问题吗?是否有支持此用例的模式(也许CI可以采用)?

2 个答案:

答案 0 :(得分:0)

如果您想在每个页面中使用它,那么您可以将其放在CI会话中而不是CI闪存数据中。

使用此选项可在需要时分别设置和取消设置会话变量。

$this->session->set_userdata('some_name', 'some_value');
$this->session->unset_userdata('some_name');

CodeIgniter支持“flashdata”或仅可用于下一个服务器请求的会话数据,然后自动清除。这些非常有用,通常用于信息或状态消息。

您可以使用keep_flashdata()通过其他请求保留flashdata变量。但是使用keep_flashdata()来获取每个页面上的数据并不是一种优雅的方式。

答案 1 :(得分:0)

您可以使用My_Controller扩展所有控制器,并在检查flashdata请求后保留AJAX

    class MY_Controller extends CI_Controller
    {
        function __construct ()
        {
            parent::__construct();
            #code shared with all controllers
            if( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
                !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
                strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
            )
            {    
                $this->session->keep_flashdata('your_data');   
            }
        }
    }

当然,这不是一个优雅的解决方案,因为您永远无法确定该请求是否来自AJAX