Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 代码点火器中的Ajax无限滚动_Php_Jquery_Ajax_Codeigniter 3 - Fatal编程技术网

Php 代码点火器中的Ajax无限滚动

Php 代码点火器中的Ajax无限滚动,php,jquery,ajax,codeigniter-3,Php,Jquery,Ajax,Codeigniter 3,我正在使用codeigniter开发我的旅行社网站。我想在我的旅游或博客列表页面上使用无限滚动,我想每次滚动页面时获取5个项目, 但当ajax发送请求时,我一次只能获取一个数据 这是我的控制器 //blog list & Views public function blogs() { $data = $this->data; $blogid = $this->uri->segment('3'); if($blogid == NULL

我正在使用codeigniter开发我的旅行社网站。我想在我的旅游或博客列表页面上使用无限滚动,我想每次滚动页面时获取5个项目, 但当ajax发送请求时,我一次只能获取一个数据

这是我的控制器

//blog list & Views   
public function blogs()
    {
    $data = $this->data;
    $blogid = $this->uri->segment('3');
    if($blogid == NULL){
        $this->load->view('themes/ui/blogs/bloglist1', $data);     
    }else{
      $data['blogdata'] = $this->ui_model->blogdetails($blogid);
      $this->load->view('themes/ui/blogs/blogdetails1', $data);       
    }
}


//infinite scroll for blogs   
public function fetch_blogs()
 {
  $output = '';
  $limit = $this->input->post('limit');
  $start = $this->input->post('start');    
  $moredata = $this->ui_model->fetch_blogs($limit, $start);
  if($moredata->num_rows() > 0)
  {
   foreach($moredata->result() as $row)
    {
    
    $data['blogdata'] = array(
        'title' => $row->title,
        'banner' => $row->banner,
        'blogid' => $row->id,
        'slug' => $row->slug
        );   
       $output = $this->load->view('themes/ui/blogs/blog_grid1',$data,true);
   }  
      
  }
  echo $output;
 }
这是模型

function fetch_blogs($limit, $start)
     {
      $this->db->set_dbprefix('');    
      $this->db->select("*");
      $this->db->from("blogs");
      $this->db->order_by("id", "DESC");
      $this->db->limit($limit, $start);
      $query = $this->db->get();
      return $query;           
     }
这里是bloglist页面,其中包含jqueryajax代码

<!DOCTYPE html>
<html lang="en">

<head>
</head>
<body>
<main>
<div class="row">
<div class="col-lg-8 col-xl-9">

<div class="mb-5 pb-1" id="load_data"></div>
<div class="mb-5 pb-1" id="load_data_message"></div>
 
</div>                   
</div>
</main>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function() {

            var limit = 5;
            var start = 0;
            var action = 'inactive';

            function lazzy_loader(limit) {
                var output = '';
                for (var count = 0; count < limit; count++) {
                    output += '<div class="post_data col-lg-12 col-xl-12 mb-3 mb-md-4 pb-1">';
                    output += '<p><span class="content-placeholder" style="width:100%; height: 200px;">&nbsp;</span></p>';
                    output += '<p><span class="content-placeholder" style="width:100%; height: 100px;">&nbsp;</span></p>';
                    output += '</div>';
                }
                $('#load_data_message').html(output);
            }

            lazzy_loader(limit);

            var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>',
                csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';

            function load_data(limit, start) {
                $.ajax({
                    url: "<?php echo base_url(); ?>en/fetch-blogs",
                    method: "POST",
                    data: {
                        [csrfName]: csrfHash,
                        limit: limit,
                        start: start
                    },
                    cache: false,
                    success: function(data) {
                        if (data == '') {
                            $('#load_data_message').html('<h3>No More Result Found</h3>');
                            action = 'active';
                        } else {
                            $('#load_data').append(data);
                            $('#load_data_message').html("");
                            action = 'inactive';
                        }
                    }
                })
            }

            if (action == 'inactive') {
                action = 'active';
                load_data(limit, start);
            }

            $(window).scroll(function() {
                if ($(window).scrollTop() + $(window).height() > $("#load_data").height() && action == 'inactive') {
                    lazzy_loader(limit);
                    action = 'active';
                    start = start + limit;
                    setTimeout(function() {
                        load_data(limit, start);
                    }, 1000);
                }
            });

        });

    </script>
</body>
</html>

$(文档).ready(函数(){
风险价值限额=5;
var start=0;
var action=‘不活动’;
功能lazzy_加载器(限制){
var输出=“”;
对于(变量计数=0;计数<限制;计数++){
输出+='';
输出+='

'; 输出+='

'; 输出+=''; } $('load#u data_message').html(输出); } lazzy_装载机(限位); var csrfName=“”, csrfHash=''; 功能加载\u数据(限制、启动){ $.ajax({ url:“en/fetch blogs”, 方法:“张贴”, 数据:{ [csrfName]:csrfHash, 极限:极限, 开始:开始 }, cache:false, 成功:功能(数据){ 如果(数据=“”){ $('load#u data_message').html('No More Result Found'); 动作='活动'; }否则{ $('load#u data')。追加(数据); $('load#u data_message').html(“”); 动作='不活动'; } } }) } 如果(操作=='inactive'){ 动作='活动'; 加载_数据(限制、启动); } $(窗口)。滚动(函数(){ if($(窗口).scrollTop()+$(窗口).height()>$(“#加载#u数据”).height()&&action='inactive'){ lazzy_装载机(限位); 动作='活动'; 开始=开始+限制; setTimeout(函数(){ 加载_数据(限制、启动); }, 1000); } }); });
这里是查看blog_grid1.php

    <div class="mb-4">
<a class="d-block" href="<?=base_url();?>en/blogs/<?=$blogdata['blogid'];?>/<?=$blogdata['slug'];?>">
    <img class="img-fluid mb-4 rounded-xs w-100" src="<?=$blogdata['banner'];?>" alt="<?=$blogdata['title'];?>">
</a>
<h5 class="font-weight-bold font-size-21 text-gray-3">
    <a href="<?=base_url();?>en/blogs/<?=$blogdata['blogid'];?>/<?=$blogdata['slug'];?>"><?=$blogdata['title'];?></a>
</h5>
<div class="mb-3">
    <a class="mr-3 pr-1" href="#">
        <span class="font-weight-normal text-gray-3">May 21, 2020</span>
    </a>
    <a href="#">
        <span class="font-weight-normal text-primary">Tourism</span>
    </a>
</div>
</div>

这里的问题是“每次ajax发送请求时,它在响应中只得到一个结果…”

但是“如果我直接在controller中编写“view_blog_grid1.php”的html代码, 然后它就如预期的那样工作了

但我不想让控制器因为太多html代码而变得凌乱,而且我有多个网格模板,比如grid1、grid2等等,我想动态加载它们。

问题就在这里

$output = $this->load->view('themes/ui/blogs/blog_grid1',$data,true);
您正在将新值设置为output,这将只导致foreach循环中的end
(第5)

要解决此问题,只需将
$this->load->view('themes/ui/blogs/blog\u grid1',$data,true)
附加到
$output
变量

$output .= $this->load->view('themes/ui/blogs/blog_grid1',$data,true);
NB*
=
运算符的平均附加值等于:

 $output = $output . $this->load->view('themes/ui/blogs/blog_grid1',$data,true)

有关于目标的例子吗?你是说每个ajax请求,我都会得到相同的结果,比如只获取帖子1-5个否,在每个ajax请求中,我只获取一个项目作为结果,从1-5个结果中取第一个,然后在下一个请求中,从6-10个结果中取第六个,从11-15个结果中取第11个。在每个请求中,“4个结果”没有显示。是的,这里是链接。。(在此url上,您将在滚动条上看到ajax请求和响应)…但是如果我将“view_blog_grid1.php”的html代码直接放在$output变量的controller方法中,那么它工作得很好。请尝试回答。谢谢,伙计!它工作了。我现在就知道了