我不知道如何使用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,这是不成功的,因为控制器发送的数据保持不变:/
答案 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将数据保存到数据库并更新页面上的内容。