2016-02-27 94 views
0

我正在尝试为新闻Feed中的帖子实现无限滚动功能。只要用户到达页脚,帖子就会加载到新闻Feed中。

在SQL查询中使用JQuery变量作为OFFSET


的问题

每一个Ajax调用执行,我想增加查询的偏移时间。我想以某种方式将jquery偏移量变量传递给php和SQL查询。


守则

// Infinite Scroll 
var offset = 0; 
if($(window).scrollTop() >= $('.post-wrapper').offset().top + $('.post-wrapper').outerHeight() - window.innerHeight) { 
    if (element_in_scroll("footer")) { 
     $('div.loadmoreajaxloader').show(); 
     $.ajax({ 
      url: '<?= Config::get('URL'); ?>index/loadPosts', 
      success: function(data) { 
       if(data) { 
        $(".post-wrapper").append(data); 
        $('div.loadmoreajaxloader').hide(); 
        offset++; 
       } else { 
        $('div.loadmoreajaxloader').html('<center>Es sind keine weiteren Posts vorhanden.</center>'); 
       } 
      } 
     }); 
    } 
}); 

查询

$query = $database->prepare("SELECT * FROM posts LIMIT 1 OFFSET $offset"); 
$query->execute(); 

return $query->fetchAll(); 


偏移增量作为我想它,在jQuery代码( console.log(offset) OUPUTS 1,2 ,3等等......)。但是,我无法将此变量放入SQL查询中。

我会非常感谢任何帮助!

回答

1

你是不是在你的Ajax请求发送javascript变量offset

更改以下行:

url: '<?= Config::get('URL'); ?>index/loadPosts', 

到:

url: '<?= Config::get('URL'); ?>index/loadPosts?offset=' + offset, 

防止SQL注入:

$query = $database->prepare("SELECT * FROM posts LIMIT 1 OFFSET :offset"); 
$query->execute(array(':offset' => $offset)); 

return $query->fetchAll(); 
+0

你能详细说说吗?我没有做什么?对不起,我对此很新。 – Schwesi

+0

然后将'$ _GET ['offset']'绑定到查询。不像你现在正在做什么,因为这将允许SQL注入。如果你像这样打开你的SQL,准备就没有意义了。 – Xorifelse

+0

这比我想象的要容易得多!非常感谢你的回答! – Schwesi

1
  1. 通过AJAXoffset值。
  2. GEToffset值在PHP文件

    // Infinite Scroll 
    var offset = 0; 
    if($(window).scrollTop() >= $('.post-wrapper').offset().top + $('.post-wrapper').outerHeight() - window.innerHeight) { 
    if (element_in_scroll("footer")) { 
        $('div.loadmoreajaxloader').show(); 
        $.ajax({ 
         url: '<?= Config::get('URL'); ?>index/loadPosts?offset='+offset, 
         success: function(data) { 
          if(data) { 
           $(".post-wrapper").append(data); 
           $('div.loadmoreajaxloader').hide(); 
           offset++; 
          } else { 
           $('div.loadmoreajaxloader').html('<center>Es sind keine weiteren Posts vorhanden.</center>'); 
          } 
         } 
        }); 
    } 
    } 
    

在PHP文件

$offset = $_GET['offset']; 
$query = $database->prepare("SELECT * FROM posts LIMIT 1 OFFSET $offset"); 
$query->execute(); 

return $query->fetchAll(); 
+0

非常感谢您的回答!它完美的作品!但是,我接受了Aamirs的回答,因为他速度更快。 – Schwesi

+0

Np,我们都在这里帮助:) – Samir