Codeigniter - 使用jQuery刷新发送到视图的数据

时间:2014-05-20 19:16:37

标签: php jquery codeigniter

我不知道如何使用jquery刷新发送到视图的数据而不刷新整个网站。我写了这样的话:

控制器:

public function blog($id) {

$data['comments'] = $this->Comments->findall('blog', $id);
$this->load->view('sites/blog', $data);

}

型号:

......从数据库中读取......

查看:

<div id="comments">

reading data from $comments sent by controller blog

</div>

如何在控制器BLOG中的函数读取新刷新的注释数量的视图中使用jQuery刷新DIV注释? 如果我输入DIV评论代码:

<? $this->load->view('sites/comments'); ?>

使用jQuery刷新此DIV,这是不成功的,因为控制器发送的数据保持不变:/

4 个答案:

答案 0 :(得分:3)

我喜欢使用以下方法:

1st:使用<div id="blog_container"></div>创建一个视图main.php。 main.php是从您的默认控制器加载的。

第二名:创建一个视图blogs.php,您可以在其中输出您的博客数据,如:

查看blogs.php

<div class="comments">
    <?=$comments?>
</div>

3rd:将一个jquery ajax函数添加到main.php,调用一个控制器函数,例如: get_blogs()。此函数查询您的博客数据并加载blogs.php,但有一个技巧:您将其设置为true,因此输出为html-string

ajax功能:

   function refresh_blog(){
      $.ajax({
        url:        url to your controller,
        type:       'POST',
        cache:      false,
        success: function(html){                    
            $('#blog_container').html(html)
        }           
      });
   }

控制器get_blogs:

get_blogs(){
    // below would better be in a model
    $html='';
    $query = $this->db->get('my_blogs');        
    $blogs = $query->result();

    foreach ($blogs as $row){
       // data from your table my_blogs column comments
          $data['comments']=$row->comments;
          $html.=$this->load->view('blogs', $data, true); // returns view as data
    };
    echo html;
}

注意:您可以在点击事件中调用您的ajax函数,也可以每x秒自动调用一次(例如使用setTimeout()

答案 1 :(得分:1)

当您添加新注释时,它们会存储在数据库中,因此当再次调用控制器时,它会获得包含更多注释的新数据。就刷新而言,你应该使用ajax来调用控制器并传递一个变量来通知控制器请求是一个ajax请求并返回json或xml数据而不是html,并通过读取新数据使用客户端javascript更新你的视图。可以使用计时器以重复的间隔进行ajax请求。

答案 2 :(得分:1)

CodeIgniter有一个内置的方法来检测请求是否是一个AJAX请求:

尝试这样的事情:

// load the comments 

if ( $this->input->is_ajax_request() ) {
  // render a view that is just the comments
} else {
  // render a view that is the whole page
}

答案 3 :(得分:0)

CodeIgniter(PHP)无法刷新页面的一部分。它只能刷新整个页面。正如其他评论者所提到的,您可以使用AJAX来实现这一目标。尝试类似jQuery load method的内容。

基本上,您需要使用ajax将数据保存到数据库并更新页面上的内容。