用户
 找回密码
 入住 CI 中国社区
搜索
查看: 13830|回复: 6
收起左侧

[讨论/交流] CI+JSON的使用小结,给那些像我一样的初学者一点帮助!

[复制链接]
发表于 2011-7-5 17:06:33 | 显示全部楼层 |阅读模式
本帖最后由 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(结果)
PHP复制代码
 
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  = {Rowsjson_string,Totaltotal}";
}
 
复制代码


2.在控制器中调用视图页,引入已转换好的数据

PHP复制代码
 
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%'
             });
                        });


------------------------
问题解决了,我是一个初学者,如果大家有更简单,更精巧的办法,请一定要告诉我,我会更努力学的,谢谢!
发表于 2011-7-5 17:24:49 | 显示全部楼层
本帖最后由 jeongee 于 2011-7-5 17:50 编辑

浏览器缓存的问题,jquery的ajax有个参数叫cache,设为false即可
 楼主| 发表于 2011-7-5 17:34:33 | 显示全部楼层
谢谢jeongee 提醒,我去看看,呵呵,我的是土办法,呵呵,
 楼主| 发表于 2011-7-5 18:16:58 | 显示全部楼层
jackbang 发表于 2011-7-5 17:34
谢谢jeongee 提醒,我去看看,呵呵,我的是土办法,呵呵,

我重新试了一下,有了新的发现,我的第一种方法,原来是在IFRAME里面所以才出现无法刷新的问题,后来我直接在单页里测试一了,一切OK,第一种办法是可行的,是放在IFRAME里导致的。jeongee兄说的“jquery的ajax有个参数叫cache,设为false即可”,其实加不加都是可以的,唉,郁闷啊,该死的IE,做怪啊,为什么FF,和CHROME不管加不加IFRAME,都可以运行呢。不想再深究了,好多事等着做呢,不过还是要谢谢jeongee兄。
发表于 2011-7-7 10:55:03 | 显示全部楼层
智齿一下!学习ing!
发表于 2011-11-23 17:16:11 | 显示全部楼层
太牛啦 ,一下解决了两个困扰我的问题,太谢谢啦
发表于 2011-11-23 17:30:54 | 显示全部楼层
感觉楼主有些啰嗦,在控制器里直接view到视图就可以了,为什么还要再跳到另一个方法来view呢

本版积分规则