Estoy recuperando datos de una base de datos mysql, 5 elementos cada vez.
$query = $pdo->prepare("SELECT * FROM names WHERE id < ? ORDER BY id DESC LIMIT 5"); $query->execute([$_POST["id"]]); while($row = $query -> fetch()) { echo "<div id="$row["id"].">".$row["name"]."</div>"; });El siguiente javascript está recuperando datos de/a través de la consulta mysql anterior. Estoy pasando por la última identificación de cada div y el sql solo está tomando las identificaciones más pequeñas/antiguas para agregarlas a continuación.
function request(id) { var data1 = "id=" + id; $.ajax({ type: "POST", url: "https://example.com/api", data: data1, cache: false, success: function(html) { $(".div").append(html); }, error: function(XHR){ } }); }; request(); $(document).on("click",".more",function(){ var id = $(".div").children( ":last" ).attr("id"); request(id); });¿Hay una forma limpia de marcar el último resultado dentro del bucle php para que pueda recogerlo con javascript/jquery y ocultar el botón de carga ".more"?
Puede aplicar los siguientes pasos:
names y guárdelo en hidden input $query = $pdo->prepare("SELECT COUNT(*) C FROM names"); ... <input type="hidden" value="<?= $row['C'] ?>" id="table_rows_count" />hidden input adicional para el valor del contador <input type="hidden" value="0" id="counter" />hidden div y almacenar nuevos elementos en él <div style="display:none;" id="hidden_div"></div>length of children en el contenedor ocultoupdate countercompare el recuento de filas y la longitud de los niños y, si son iguales, oculte el botón .more ... success: function(html) { $(".div").append(html); $("#hidden_div").append(html); var len = $("#hidden_div")[0].children.length, coun = $('#counter').val(), new_counter = coun + len, table_rows = $('#table_rows_count').val(); $('#counter').val(new_counter); if (table_rows == new_counter) $('.more').css('display','none'); $("#hidden_div").html('') }, ... Nota: la salida de su solicitud $.ajax() debe estar presente solo como una lista de etiquetas divs ( <div>...</div> ), nada más. Además, olvidó pasar un argumento a su función de primera llamada request() .