Avertissement Big commencer par: Je suis toujours super nouveau pour php & js, donc s'il vous plaît soyez doux ... haha infini Scrolling (mysql, php & js) boucle d'émission
Quoi qu'il en soit, je suis essayer de créer un simple défilement infini qui récupère les messages d'une table mysql. J'ai bricolé du code à partir de divers didacticiels sur Internet pour créer quelque chose qui accède et récupère des informations. Le problème est le nombre de messages et le nombre de messages récupérés. Avec "$ perpage" dans le fichier PHP défini à 10, les 20 premiers messages se chargent, puis chaque fois qu'il charge de "nouveaux messages", il charge simplement les messages 11-20 à plusieurs reprises. J'imagine que c'est probablement quelque chose de simple, mais mon niveau de php est vraiment seulement au niveau où je peux le comprendre, mais je ne peux pas l'écrire.
J'ai essayé d'ajouter LIMIT à la fin de la ligne $ sql, mais cela semblait juste casser le code.
Toute aide serait grandement appréciée!
Si vous voulez voir en action dans la vie réelle, le (très) projet de site est: site
$(document).ready(function(){
function getresult(url) {
$.ajax({
url: url,
type: "GET",
data: {rowcount:$("#rowcount").val()},
beforeSend: function(){
$('#loader-icon').show();
},
complete: function(){
$('#loader-icon').hide();
},
success: function(data){
$("#faq-result").append(data);
},
error: function(){}
});
}
$(window).scroll(function(){
if ($(window).scrollTop() == $(document).height() - $(window).height()){
if($(".pagenum:last").val() <= $(".total-page").val()) {
var pagenum = parseInt($(".pagenum:last").val()) + 1;
getresult('../php/best_result.php?page='+pagenum);
}
}
});
});
<?php
require_once("login.php");
$db_handle = new DBController();
$perPage = 10;
mysql_query("SET NAMES utf8");
$sql = '
SELECT letter, dayfield, monthfield, yearfield, nickname, country
FROM BestWorst
WHERE `lettertype` = "best" ORDER BY `ID` DESC';
$page = 1;
if(!empty($_GET["page"])) {
$page = $_GET["page"];
}
$start = ($page-1)*$perPage;
if($start < 0) $start = 0;
$query = $sql . " limit " . $start . "," . $perPage;
$faq = $db_handle->runQuery($query);
if(empty($_GET["rowcount"])) {
$_GET["rowcount"] = $db_handle->numRows($sql);
}
$pages = ceil($_GET["rowcount"]/$perPage);
$output = '';
if(!empty($faq)) {
$output .= '<input type="hidden" class="pagenum" value="' . $page . '" /><input type="hidden" class="total-page" value="' . $pages . '" />';
foreach($faq as $k=>$v) {
$output .= '<div class="entry wow fadeInUp lefttext"><br/><p>'
. nl2br($faq[$k]["letter"])
. '</p><br/><p class="small" align="right">- This story took place on '
. $faq[$k]["dayfield"] . '/'
. $faq[$k]["monthfield"] . '/'
. $faq[$k]["yearfield"]
. '. Posted by ' . $faq[$k]["nickname"]
. ' from ' . $faq[$k]["country"]
.'<p></div><br/><br/><br/>';
}
}
print $output;
?>
Mettez quelques informations de débogage. Avez-vous confirmé que l'URL correcte est passée à '$ .ajax()' et que la requête attendue est en cours de construction pour MySQL? – miken32
Votre code jQuery ressemble à plusieurs éléments avec la classe 'pagenum' mais il n'y a qu'une seule sortie par PHP. Et il sort juste la valeur passée de '$ _GET [" page "]' sans le changer. – miken32
Merci Miken32! Ok, quelques réponses noob venant à votre rencontre: 1) Je n'ai pas réalisé que l'URL avait besoin d'une page spécifique. Je l'avais laissé par inadvertance littéralement comme "url". J'ai essayé d'insérer le fichier php ci-dessus en tant qu'URL, mais cela juste ensuite boucles messages 1-10 encore et encore et encore. 2) En ce qui concerne "jQuery étant spécialement construit pour MySQL", je ne suis pas sûr de ce que cela signifie ..? Cependant, il récupère les informations de la base de données sql sans problème, c'est juste l'ordre de la récupération qui pose problème. 3) Votre dernier point à propos de l'attente de plusieurs éléments, quels changements au code recommanderiez-vous? – Leesome