• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Mehrfaches automatisches Nachladen bei Button-Klick

Heinz99

New member
Hallo zusammen,
bin neu hier und weiß nicht, ob ich im richtigen Forum schreibe.
Bin schon über 1 Tag auf der Suche nach einem Skript, finde aber nichts passendes.
Wäre für Tipps sehr dankbar.

Ich habe folgendes Problem:
-> Kommentaliste ... beim 1. Laden der Seite werden 10 Kommentare angezeigt.
-> Klick Button "Nachladen", es werden weitere 10 geladen.
Soweit - so gut ... das habe ich mit Ajax gelöst (Ausführung über externe php-Seite ... 10 weitere Kommentare werden in eine DIV (mit ID) nachgeladen.
Das Problem: es funktioniert ja nur 1x ... dann bräuchte ich eine weitere php-Seiten, um weitere Daten zu laden. Bei z.B. 1000 Kommentaren müsste ich also 100 php-Seiten anlegen.

Geht das auch einfacher? Das Ziel wäre (ohne die Seite neu zu laden!):
1. Buttonklick: DB-Abfrage Kommentar 10-19 -> Ausgabe darunter
2. Buttonklick: "............................... 20-29 ..........................."
3. Buttonklick: "............................... 30-39 ..........................."
.........
x. Buttonklick: bis zum letzten Datensatz, dann die Meldung "Keine weiteren Kommentare".


Gruß,
Heinz
 
Warum gibst du im Ajax Request nicht einen Zähler in einem weiteren Parameter mit, der bei jedem success um 10 inkrementiert wird?
 
Danke für den raschen Hinweis. Bin jedoch AJAX-Neuling ;-/
Gibt es gute Tutorials, wo man diesen Request nachlesen kann?
Habe selbst schon gegoogelt - man findet viel, aber vielfach sehr umständlich.

Meintest du mit AJAX-Request den XMLHttpRequest ?
wie z.B. hier:
JavaScript/API/XMLHttpRequest

Gruß,
Heinz
 
du hattest geschrieben dass du es mit ajax gelöst hast. da muustest du doch auch schon einen parameter benutzen damit das serverscript die richtigen kommentare selektiert. ergänze da doch einfach den neuen zähler.
 
hesst ich meinte nicht vertikal sondern den datensatz um dessen kommentare es geht. muss ja irgendwie selektiert werden.
 
Hallo zusammen,
habe derweil etwas rumprobiert, bin aber immer noch zu keiner Lösung gekommen.

Hier mal mein bisheriger Weg

1. php-Datei
Hier werden z.B. die ersten 10 Kommentare geladen (also Datensätez 0-9 aus der DB)
Im Anschluss befindet sich folgendes Script:
Code:
<!-- ...................... Ziel des Nachladens ...................... -->
<div id="target2"></div>

<!-- ...................... Button zum Nachladen...................... -->
<div id="nachladen2" onclick="kommentare_nachladen2()"><span>Weitere ansehen</span></div>

<!-- ...................... Aufruf "kommentare_nachladen2.inc.php" ...................... -->
<script>
function kommentare_nachladen2() {
	$.get('kommentare_nachladen2.inc.php', function(data) {
		$('#target2').html(data);   
	})
}
</script>
<!-- ...................... Verstecken des Buttons nach dem Klick ...................... -->
<script>
$('#nachladen2').click(function() {
    $('#nachladen2').hide();
});
</script>

2. kommentare_nachladen2.inc.php
Dies wir dann in der DIV "target2" in der 1. php-Datei ausgegeben:
Code:
 // DB-Abfrage Datensätze 10-19
// php-Code zur Ausgabe der weiteren 10 Datensätze
// Im Anschluss wiederum:
<div id="nachladen3" onclick="kommentare_nachladen3()"><span>Weitere ansehen</span></div>
<script>
function kommentare_nachladen3() {
	$.get('kommentare_nachladen3.inc.php', function(data) {
		$('#target3').html(data);   
	})
}
</script>

Funktioniert für sich wunderbar ... aber so müsste ich für z.B. 1000 Kommentare, 100 Nachladeseiten erstellen.
kommentare_nachladen2.inc.php
... bis ...
kommentare_nachladen100.inc.php


Aber es wäre gut, wenn nur die 1. inc.php solange wiederholt werden könnte, wie Kommentare in der DB gespeichert sind. Wenn es nur 30 sind, nur 30 ... wenn es 5000 sind, alle 5000 in 10er-Schritten.

Wie müsste ich da die Variablen weitergeben?
Bzw. ... mit dem Klick auf den Button wird ja eine mögliche Schleife unterbrochen und kann nicht neu gestartet werden.

Gibt es dafür überhaupt eine Lösung?

Besten Dank im Voraus.
Gruß
Heinz
 
Für jeden Nachladeschritt eine eigene PHP-Datei zu machen ist unnötig und schwer zu warten. Die Zahl, die du jetzt an den Dateinamen dranhängst, kannst du doch als GET-Parameter mit übergeben. Dann brauchst du nur eine Datei. Du musst nur die Nachlade-URL nach jedem nachladen etwas ändern... und wenn in der DB keine Kommentare mehr drin stehen, musst du in deiner Rückgabe das so markieren, dass der Nachladebutton einfach versteckt wird.
 
Die Zahl, die du jetzt an den Dateinamen dranhängst, kannst du doch als GET-Parameter mit übergeben.
Genau das wollen wir ja nicht - ein Reload der ganzen Seite (per get/post): Es wird beim Reload auch ein Video mit x MB geladen, was die Performance für Smartphones extrem runtersetzen würde. Wir wollen einfach per AJAX 10 weitere Datensätze nachladen ... das geht für die ersten 10 ruckzuck und klappt sehr gut - ein Neuladen der ganzen Webseite dauert vielleicht 10x länger (oder gar noch mehr).

Eine GET/POST-Übergabe ist Plan B ... Plan A wäre, jeweils nur die nächsten 10 Datensätze (per AJAX, per Button-Klick) nachzuladen ... aber statt 100 einzelne Nachlade-Seiten nur eine einzelne, die vielleicht neu reloaded wird.

Leider bin ich diesbezüglich zur Zeit ziemlich ratlos ... habe auch schon einiges probiert - aber leider genauso ziemlich erfolglos :(
Gruß,
Heinz
 
Äh - wer hat denn was von Reload gesagt? Du kannst auch der URL des AJAX-Requests GET-Parameter mitgeben...
 
Ja, die Variable (nächste 10) kann ich weitergeben, funktioniert, es werden weitere 10 Datensätze nachgeladen ... aber die Funktion kann ich nur 1x aufgerufen. Danach tut sich leider nichts mehr.

- - - Aktualisiert - - -

Hallo zusammen,
nach längerem Rumprobieren -> Problem gelöst! :icon6:

Habe in der Nachladedatei per php jeder Nachladen-Funktion eine andere ID gegeben und auf sich selbst verlinkt.
So klappt das nun wunderbar, wie ich es wollte.

Danke für die Hilfe ... der ausschlaggebende Punkt war der Tipp mit der Get-Weitergabe innerhalb der AJAX-Funktion.

Gruß,
Heinz
 
Zurück
Oben