2016-02-27 61 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