我有一个从视图发送到控制器的大字符串数据。该字符串可能超过65535个字符。我试图将它存储在会话闪存数据中。
这是我在控制器中存储数据的方法
public function get_dt_pemenuhan_d2(){
$this->load->library('session');
$list = $this->input->post('no_pnh'); //a huge list of item
$this->session->set_flashdata('sess_no_pnh',$list);
}
这是我从会话flashdata中检索数据的方法
public function pembebanan2(){
$this->load->library('session');
$get_no_pnh = $this->session->flashdata('sess_no_pnh');
$data = array('no_pnh' => $get_no_pnh);
$this->load->view('memo_pembebanan2',$data); //sending the data to a view
}
对于小数据(少于500个字符),一切都很好。但是,如果我存储了大量数据,则不会向视图发送任何内容。我已经使用警报来确保所有数据完全发送到控制器,这一切都很好。那么,代码中有什么问题?
非常感谢任何帮助和建议。谢谢
修改: 这是视图以及我如何将数据发布到控制器,然后在弹出视图中查看它
$("#btn_memo").on('click',function(e){
var arr_pnh = [];
$('#tbl_content tr td:nth-child(2)').each(function(){
var x = $(this).text().split('||');
arr_pnh.push(x[1]);
});
var no_pnh = arr_pnh;
$.post('<?php echo site_url('con_atk/get_dt_pemenuhan_d2'); ?>',{no_pnh:no_pnh},function(){
popUp = new Boxy("<iframe src='<?php echo site_url('con_atk/pembebanan2') ?>' width='640px' height='480px' frameborder='0'></iframe>" , {title: "<strong>Memo Pembebanan</strong>" , modal: true});
});
});
这就是观点:
<div id="div_tbl_body">
<table id="tbl_content" width="100%" class="table table-bordered" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th style="width:4%; text-align:right">No</th>
<th style="width:32%; text-align:center">Names</th>
</tr>
</thead>
<tbody>
//"<tr><td>"+ no++ +"</td>";<!-- This is generated by AJAX-->
// "<td align='center'>"+ id +"<font size='1px' color='#FFFFFF'>||"+no_pnh+"</font></td></tr>";<!-- This is generated by AJAX-->
</tbody>
</table>
</div>
我的问题是为什么我不能在会话中存储巨大的sata?是否有任何选项可以在控制器中存储大量数据,并且可以通过方法访问除了使用会话?
答案 0 :(得分:2)
编辑:经过研究,我找到了一个建议,很可能会有效。
我看到会话的大小有限,甚至还有cookie。
最好的方法是获取数据,将其存储在数据库中,从模型进入控制器,然后将其传递给弹出窗口。
您的下一个选项是将其存储到.txt文件中,然后从那里加载。
编辑:您可以做以下事情。
发布数据做一个控制器,而不是这样做
public function get_dt_pemenuhan_d2(){
$this->load->library('session');
$list = $this->input->post('no_pnh'); //a huge list of item
$this->session->set_flashdata('sess_no_pnh',$list);
}
这样做
public function get_dt_pemenuha_d2()
{
$this->load->model('your_model');
$list = $this-input->post('no_pnh');
$this->your_model->insert_into_table($list);
}
这将是您的模型功能
public function insert_into_table($list)
{
$this->db->insert('table_name',$list);
}
然后如果您想要访问它,只需执行此操作
public function pembebanan2()
{
$this->load->model('your_model');
$data['list'] = $this->your_model->get_list();
$this->load->view('memo_pembebanan2',$data);
}
这是你的get_list函数
public function get_list()
{
$this->db->get('yourtable');
}
如果你想要完成,你可以删除表格的内部,或者如果你想保留其他人的名单,可以使用一个ID来使用where子句。
无需将其变为全局变量,只需加载模型并获取列表
现在在您的视图中,您只需回显$ list
答案 1 :(得分:1)
也许只是尝试使用gzencode
$this->session->set_flashdata('sess_no_pnh', gzencode($list));
或者只是将其存储在临时文件中,并继续引用会话:
$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");
fwrite($handle, $list);
fclose($handle);
$this->session->set_flashdata('sess_no_pnh', $tmpfname);
然后只需在弹出窗口中阅读:
$get_no_pnh = $this->session->flashdata('sess_no_pnh');
$data = array('no_pnh' => file_get_contents($get_no_pnh));
unlink($get_no_pnh);