Frage von xe150dh, 68

JQUERY/AJAX - Div Refresh mit setTimeout, wie stoppen?

Hallo zusammen.

Durch onClick auf einen link:

<a href="#" onClick="startRefresh()">

... wird folgendes script ausgeführt:

Code:

function startRefresh() {


setTimeout(startRefresh,1500);

$.get('home2.php', function(data) {

        $('#refresh2').html(data);    
});
}

Der div container #refresh2 wird auch erfolgreich nach 1,5 Sekunden aktualisiert, doch leider hängt es dann in einer Schleife und der Container wird durchgehend aktualisiert.

Ich habe versucht return; einzubauen, doch auch leider Ohne erfolg.

Ich bin neu auf dem Gebiet und würde mich freuen, wenn mir jemandeinen Tipp geben kann ,wie ich diese Schleife beende.

LG

Antwort
von LeonardM, 10

Set timeout an sich bildet keine sich wiederholende schleife.. du meinst wohl window.setinterval(x,y);.. die kannst du via clearinterval funktion wieder stoppen

Antwort
von Dory1, 16

Der Container soll also nur ein mal, und zwar erst nach 1,5 Sekunden aktualisiert werden?

function startRefresh() {
setTimeout(function () {
$.get('home2.php', function(data) {
$('#refresh2').html(data);
});
}, 1500);
}

In deiner Variante erstellst du ja bei jedem Aufruf der Funktion einen neuen Timeout, der wieder die Funktion aufruft. Das resultiert natürlich in einer Endlosschleife.

Kommentar von xe150dh ,

Danke schon mal. Wie verhindere ich das, sodass dennoch 1,5 sekunden gewartet werden?

Kommentar von Dory1 ,

Falls der Container sofort und zusätzlich noch 1x nach 1,5 Sekunden aktualisiert werden soll:

function startRefresh() {
var refresh;
(refresh = function() {
$.get('home2.php', function(data) {
$('#refresh2').html(data);
});
})();
setTimeout(refresh, 1500);
}
Kommentar von xe150dh ,

Vielen Dank! Funktioniert!

Kommentar von xe150dh ,

Neues Problem :S

Ich habe verschiedene Seiten wie in etwa: home.php?seiten_nr=3

Wenn jetzt das Skript die Seite aktualisiert, dann lande ich auf Seite 1 :/

Kommentar von Dory1 ,

Verstehe ich nicht ganz. Das Skript aktualisiert doch nicht die gesamte Seite sondern nur einen Teil davon?

Kommentar von xe150dh ,

Meine home2.php Sieht in etwa so aus:

<?php

$row_counter = $pdo->prepare("SELECT choicyID FROM choicies");
$row_counter->execute();
$row_count = $row_counter->rowCount();
$ergebnisse_pro_seite = 25;
$gesamt_seiten = ceil($row_count/$ergebnisse_pro_seite);

if (empty($_GET['seite_nr'])) {
$seite = 1;
} else {
$seite = $_GET['seite_nr'];
if ($seite > $gesamt_seiten) {
$seite = 1;
}
}

$limit = ($seite*$ergebnisse_pro_seite)-$ergebnisse_pro_seite;

//Abfrage Beiträge
$sql = "SELECT choicies.choicyID, choicies.title, choicies.category, choicies.description, choicies.date, choicies.time, choicies.userID, choicies.options, users.userName, users.userId "
. "FROM choicies, users "
. "WHERE users.userId = choicies.userID AND deleted = 0 ORDER BY choicies.likes DESC, time DESC LIMIT ".$limit.", ".$ergebnisse_pro_seite;
foreach ($pdo->query($sql) as $row) {
?>

<?php include('posts_out/3options/newest_3options.php'); ?>

<?php

}

for ($i=1; $i<=$gesamt_seiten; ++$i) {
if ($seite == $i) {
echo ''.$i.'';
} else {
echo ''.$i.'';
}
}

?>
Kommentar von xe150dh ,

Da habe ich nun das Problem ,dass ich nicht einzelne beiträge, die dort includet werden, aktualisieren kann, denn bei der aktualisierung übernimmt er nicht die variablen der PHP Datei, in das das Skript eingebunden wurde :(

Kommentar von Dory1 ,

Du meinst dass die GET-Parameter (seite_nr etc.) aus der URL im Skript nicht übernommen werden?

Kommentar von xe150dh ,

ich glaube mein Problem ist, dass ich zu viel Aktualisiere. Ich müsste eigentlich nur einen div des jeweiligen beitrags aktualisieren. Gibt es andere möglichkeiten als eine php Datei einzubinden?

Kommentar von Dory1 ,

Warum muss da überhaupt etwas per Javascript aktualisiert werden? Reicht es nicht den Beitrag einmalig beim betreten der Seite zu laden?

Keine passende Antwort gefunden?

Fragen Sie die Community