Илиян
Active Member
Здравейте, пробвам един скрипт за зареждане на допълнителни страници от базата при скролване и нещо не иска да работи коректно под chrome.
Това е JS кода:
Това е PHP - макар, че при него всичко е ясно и едва ли проблема е там:
Под firefox всичко работи напълно нормално - изкарва си първите резултати и като скролна вади следващите, след това следващите и т.н. При chrome обаче ми вади или само първите и вторите и след това изписва, че няма повече резултати, или вади първите и вторите наведнъж и пак не стига до края. Знаете ли откъде може да е проблема - вижда се, че се предава POST към php от ajax, за да се знае коя страница да зареди, но май-проблема е в javascripta и по някакъв начин не ми отчита правилно страниците при chrome.
Това е JS кода:
Код:
<script type="text/javascript" src="js/jquery-1.9.0.min.js"></script>
<script type="text/javascript">
var track_page = 1; //track user scroll as page number, right now page number is 1
var loading = false; //prevents multiple loads
load_contents(track_page); //initial content load
$(window).scroll(function() { //detect page scroll
if($(window).scrollTop() + $(window).height() >= $(document).height()) { //if user scrolled to bottom of the page
track_page++; //page number increment
load_contents(track_page); //load content
}
});
//Ajax load function
function load_contents(track_page){
if(loading == false){
loading = true; //set loading flag on
$('.loading-info').show(); //show loading animation
$.post( 'fetch_pages.php', {'page': track_page}, function(data){
loading = false; //set loading flag off once the content is loaded
if(data.trim().length == 0){
//notify user if nothing to load
$('.loading-info').html("No more records!");
return;
}
$('.loading-info').hide(); //hide loading animation once data is received
$("#results").append(data); //append data into #results element
}).fail(function(xhr, ajaxOptions, thrownError) { //any errors?
alert(thrownError); //alert with HTTP error
})
}
}
</script>
Това е PHP - макар, че при него всичко е ясно и едва ли проблема е там:
Код:
include("config.inc.php"); //include config file
//sanitize post value
$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);
//throw HTTP error if page number is not valid
if(!is_numeric($page_number)){
header('HTTP/1.1 500 Invalid page number!');
exit();
}
//get current starting point of records
$position = (($page_number-1) * $item_per_page);
//fetch records using page position and item per page.
$results = $mysqli->prepare("SELECT id, name, message FROM paginate ORDER BY id DESC LIMIT ?, ?");
//bind parameters for markers, where (s = string, i = integer, d = double, b = blob)
//for more info https://www.sanwebe.com/2013/03/basic-php-mysqli-usage
$results->bind_param("dd", $position, $item_per_page);
$results->execute(); //Execute prepared Query
$results->bind_result($id, $name, $message); //bind variables to prepared statement
//output results from database
while($results->fetch()){ //fetch values
echo '<li>'.$id.') <strong>'.$name.'</strong> : '.$message.'</li>';
}
Под firefox всичко работи напълно нормално - изкарва си първите резултати и като скролна вади следващите, след това следващите и т.н. При chrome обаче ми вади или само първите и вторите и след това изписва, че няма повече резултати, или вади първите и вторите наведнъж и пак не стига до края. Знаете ли откъде може да е проблема - вижда се, че се предава POST към php от ajax, за да се знае коя страница да зареди, но май-проблема е в javascripta и по някакъв начин не ми отчита правилно страниците при chrome.