CI+JSON的使用小结,给那些像我一样的初学者一点帮助!
本帖最后由 jackbang 于 2011-7-5 17:14 编辑CI 好棒!
-------------------------------------
我原来是用自带的CI分页类,写分页,后来打算用JQUERY来做AJAX无刷新分页,要用到JSON,
第一次用的办法是:
1.在控制器里写一个方法,得到数据用PHP自带的JSON转换方法,转成JSON数据,ECHO输出。
2.另在视图页HEAD里面加入<script src="<?php echo site_url('entinfo_notify/AllToJson')?>" type="text/javascript"></script>
3。然后在JQUERY 里面调用。
问题是。在IE6.0下,如果我做出增删改,操作后再返回该视图页,竟然无法更新数据,要手工刷新才看得到。而在FF,或CHROME里,就没这个问题。查了一下,说是IE6.0下会有缓存的问题,所以老是看到第一次调用的数据。
摸索一阵,总算解决了我的问题,希望对我等初学者有帮助!
第二次使用的办法是:
1. 在控制器里写方法中,不要直接ECHO输出数据,而是RETURN查询结果给要调用视图的方法里带入这个数据。
2.在输出视图的方法里面引用这个数据,并带到视图中。
3.在视图页中引用这个数组。
---------------------------------------------------
第二次使用的代码如下:
1.在控制器中,写一个方法,得到数据结果,并json_encode(结果)
function AllToJson()
{
//载入模型
$this->load->model('notify_m');
//以对象方式获得数据
$query=$this->notify_m->GetAll();
//遍历数据赋给数组变量
for($i=0;$i<$query->num_rows();$i++ )
{
$mydata[] = $query->row_array($i);
}
//获得记录总数
$total=$query->num_rows();
//转换为JAVASCRIPT可用的JSON数据(PHP>=5.2版才支持JSON直接转换)
$json_string = json_encode($mydata);
//赋值--
$data['total']=$total;
$data['jsonstr']=$json_string;
return $data;
//第一次的方法是这样输出数据的
// echo "var myjson= {Rows:$json_string,Total:$total}";
}
2.在控制器中调用视图页,引入已转换好的数据
function index()
{
$data=$this->AllToJson();
$this->load->view('entinfo/notify_index',$data);
}
3.在视图页引用这个已转换好的JSON数据
首先在<head></head>之间,加入
<script type="text/javascript">
var myjson = {Rows:<?php echo $jsonstr;?>,Total:<?php echo $total;?>};
</script>
然后,就可以在JQUERY中调用这些数据了
$(function () {
//--查询表单
//--表格
$("#seachlist").defaultGrid({
checkbox: true,
columns: [
{ display: '主键', name: 'id', align: 'left', width: 40},
{ display: '公告类型', name: 'notify_type', minWidth: 80 },
{ display: '公告标题', name: 'notify_title', width: 300,align:'left' },
{ display: '附件', name: 'notify_accessory', minWidth: 80 },
{ display: '发布时间', name: 'notify_published', minWidth: 100 },
{ display: '发布人', name: 'notify_username', minWidth: 80 },
],dataAction: 'server', pageSize:20,
data: myjson, sortName: 'id',
width: '99.8%',height:'99.5%'
});
});
------------------------
问题解决了,我是一个初学者,如果大家有更简单,更精巧的办法,请一定要告诉我,我会更努力学的,谢谢!
本帖最后由 jeongee 于 2011-7-5 17:50 编辑
浏览器缓存的问题,jquery的ajax有个参数叫cache,设为false即可 谢谢jeongee 提醒,我去看看,呵呵,我的是土办法,呵呵, jackbang 发表于 2011-7-5 17:34 static/image/common/back.gif
谢谢jeongee 提醒,我去看看,呵呵,我的是土办法,呵呵,
我重新试了一下,有了新的发现,我的第一种方法,原来是在IFRAME里面所以才出现无法刷新的问题,后来我直接在单页里测试一了,一切OK,第一种办法是可行的,是放在IFRAME里导致的。jeongee兄说的“jquery的ajax有个参数叫cache,设为false即可”,其实加不加都是可以的,唉,郁闷啊,该死的IE,做怪啊,为什么FF,和CHROME不管加不加IFRAME,都可以运行呢。不想再深究了,好多事等着做呢,不过还是要谢谢jeongee兄。 智齿一下!学习ing! 太牛啦 ,一下解决了两个困扰我的问题,太谢谢啦 感觉楼主有些啰嗦,在控制器里直接view到视图就可以了,为什么还要再跳到另一个方法来view呢
页:
[1]