随着对CI的下一个请求擦除flashdata。需要在每个页面上调用AJAX的应用程序都会使flashdata无用。我通过在AJAX控制器方法的每个项目上运行keep_flashdata()来解决这个问题。
在我的特定用例中,每次加载页面时都会调用AJAX来从Web应用程序中提取通知。
有更优雅的方式来处理这个问题吗?是否有支持此用例的模式(也许CI可以采用)?
答案 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
。