我有一个大字符串数据从视图发送到控制器。字符串长度不能超过65535个字符。我已经尝试将其存储在会话flash数据中。
这是我在控制器中存储数据的方法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个字符),一切都很好。但如果我存储一个大数据,什么都不会发送给视图。我使用alert来确保所有数据完全发送到控制器,一切正常。那么,代码中有什么问题呢?
任何帮助和建议都是非常感谢的。谢谢你编辑:这是视图以及我如何将数据发送到控制器然后在弹出视图
中查看它$("#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 ?是否有任何选项来存储巨大的数据在控制器,可以通过方法访问除了使用会话?
编辑:经过研究,我找到了一个建议,很可能会起作用。
我看到会话的大小是有限的,甚至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
也许只是尝试使用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);