2014-03-14 49 views
0

我正在使用以下腳本。你將如何使用這個無限滾動腳本來設置url參數?

http://www.inserthtml.com/2013/01/scroll-pagination/

它的偉大工程。

但是,它僅適用於1頁。如果我有多個頁面,它將爲所有這些頁面運行相同的查詢結果。我不要那個。

我想要做的是對每個頁面有不同的查詢結果。通常我有頁面設置,這些查詢結果顯示出來。現在我只需要用無限滾動添加這些結果的功能。

我該如何繼續這麼做?

UPDATE

這裏有3個文件,我創建給你看我的設置。文件名與上述演示鏈接中的文件名相匹配。

你能告訴我你將代碼放在這些文件中的位置嗎?

的index.php

<?php 

$hostname='127.0.0.1'; 
$username='root'; 
$password=''; 

$dbh = new PDO("mysql:host=$hostname;dbname=cave",$username,$password); 
?> 

<!DOCTYPE HTML> 
<head> 
<script type="text/javascript" src="jquery-1.11.0.min.js"></script> 
<script src="javascript.js"></script> 
<script type="text/javascript" src="//use.typekit.net/vue1oix.js"></script> 
<script type="text/javascript">try{Typekit.load();}catch(e){}</script> 
<script> 

$(document).ready(function() { 

$('#content').scrollPagination({ 

nop  : 4, // The number of posts per scroll to be loaded 
offset : 0, // Initial offset, begins at 0 in this case 
error : 'No More Posts!', // When the user reaches the end this is the message that is 
// displayed. You can change this if you want. 
delay : 500, // When you scroll down the posts will load after a delayed amount of time. 
    // This is mainly for usability concerns. You can alter this as you see fit 
scroll : true // The main bit, if set to false posts will not load as the user scrolls. 
    // but will still load if the user clicks. 

}); 

}); 

</script> 
<style> 

h1 { 
font-size: 50px; 
} 

</style> 


</head> 

<body> 

<div id="content"> </div> 


</body> 
</html> 

ajax.php

<?php 
$hostname='127.0.0.1'; 
$username='root'; 
$password=''; 

$dbh = new PDO("mysql:host=$hostname;dbname=cave",$username,$password); 

$offset = is_numeric($_POST['offset']) ? $_POST['offset'] : die(); 
$postnumbers = is_numeric($_POST['number']) ? $_POST['number'] : die(); 


$getPosts = $dbh->prepare("SELECT * FROM posts ORDER BY id DESC LIMIT ".$postnumbers." OFFSET ".$offset); 
$getPosts->execute(); 
$post = $getPosts->fetchAll(); 

if(count($post) > 0) { 
foreach($post as $row) { 

$title = $row['title']; 
$post = $row['post']; 

?> 
<h1><?php echo $title ?></h1> 
<h3><?php echo $post ?></h3> 
<?php 
} 
} 
?> 

javascript.php

(function($) { 

    $.fn.scrollPagination = function(options) { 

     var settings = { 
      nop  : 4, // The number of posts per scroll to be loaded 
      offset : 0, // Initial offset, begins at 0 in this case 
      error : 'No More Posts!', // When the user reaches the end this is the message that is 
             // displayed. You can change this if you want. 
      delay : 500, // When you scroll down the posts will load after a delayed amount of time. 
          // This is mainly for usability concerns. You can alter this as you see fit 
      scroll : true // The main bit, if set to false posts will not load as the user scrolls. 
          // but will still load if the user clicks. 
     } 

     // Extend the options so they work with the plugin 
     if(options) { 
      $.extend(settings, options); 
     } 

     // For each so that we keep chainability. 
     return this.each(function() {  

      // Some variables 
      $this = $(this); 
      $settings = settings; 
      var offset = $settings.offset; 
      var busy = false; // Checks if the scroll action is happening 
           // so we don't run it multiple times 

      // Custom messages based on settings 
      if($settings.scroll == true) $initmessage = 'Scroll for more or click here'; 
      else $initmessage = 'Click for more'; 

      // Append custom messages and extra UI 
      $this.append('<div class="content"></div><div class="loading-bar">'+$initmessage+'</div>'); 

      function getData() { 

       // Post data to ajax.php 
       $.post('ajax.php?page=' + page, { 

        action  : 'scrollpagination', 
        number  : $settings.nop, 
        offset  : offset, 

       }, function(data) { 

        // Change loading bar content (it may have been altered) 
        $this.find('.loading-bar').html($initmessage); 

        // If there is no data returned, there are no more posts to be shown. Show error 
        if(data == "") { 
         $this.find('.loading-bar').html($settings.error); 
        } 
        else { 

         // Offset increases 
         offset = offset+$settings.nop; 

         // Append the data to the content div 
         $this.find('.content').append(data); 

         // No longer busy! 
         busy = false; 
        } 

       }); 

      } 

      getData(); // Run function initially 

      // If scrolling is enabled 
      if($settings.scroll == true) { 
       // .. and the user is scrolling 
       $(window).scroll(function() { 

        // Check the user is at the bottom of the element 
        if($(window).scrollTop() + $(window).height() > $this.height() && !busy) { 

         // Now we are working, so busy is true 
         busy = true; 

         // Tell the user we're loading posts 
         $this.find('.loading-bar').html('Loading Posts'); 

         // Run the function to fetch the data inside a delay 
         // This is useful if you have content in a footer you 
         // want the user to see. 
         setTimeout(function() { 

          getData(); 

         }, $settings.delay); 

        } 
       }); 
      } 

      // Also content can be loaded by clicking the loading bar/ 
      $this.find('.loading-bar').click(function() { 

       if(busy == false) { 
        busy = true; 
        getData(); 
       } 

      }); 

     }); 
    } 

})(jQuery); 

回答

0

當你調用file.php無線細化JQuery,像通常那樣添加一個字符串,以便file.php頁面可以提取查詢字符串值。你可以使用你正在使用的任何語言動態地做到這一點。如果沒有任何變量需要像缺省頁面/ page1那樣傳遞,那麼不要發送任何變量。將這些值傳遞給您的數據庫查詢字符串。最適合DB查詢的參數化值。基本上,您將通過查詢字符串將相同的信息傳遞給頁面,就像您通常通過分頁按鈕/鏈接所做的那樣。

var parameters = "?page=2&category=cat&user=joe" 
$.post('file.php' + parameters, { 
    information  : 'to be sent', 
    to     : 'file' 
    }, function(data) { 
    } 
}); 
+0

對不起,我有點困惑。你能給我一個數據庫查詢的例子,以及它將如何與上面顯示的JavaScript代碼交互? – thatoneguy

相關問題