setTimeout() - Een vertraging maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

22/09/2013 20:49:28
Quote Anchor link
Ik heb een script waarbij ik enkele delen wil vertragen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
elseif ($p == 'wijzigennaam'){ // Als de pagina gelijk is aan wijzigennaam
if ($e < 25){ // Als het aantal diamanten lager is dan 25 (Deze optie kost 25 Diamanten op mijn spel)
echo 'Je hebt tekort Diamanten!'; // De echo
} // if afsluiten
elseif ($e > 24) { // Als het aantal diamanten groter is dan 24 (Dus 25 of hoger)
if(isset($_POST['Wijzigen'])){ // Controle of er op de submit knop is gedrukt
echo '<script type="text/javascript"> // en nu gaat het fout
var check = function(){
    if(condition){
    }
    else {
        setTimeout(check, 1000);
    }
}
</script>'
;
$usp = $_POST['nieuwenaam'];
echo 'Processen uitvoeren... Even geduld...';
echo "<br>";
check(); // Ik wil hier een vertraging van 1 of 2 seconden
$duww = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='$uname'";
if(mysql_query($duww)){
echo "Er zijn 25 diamanten afgeschreven... Even geduld...";
echo "<br>";
}

check(); // En hier ook - Er moet pas later dit worden uitgevoerd en komen te staan
$duw = "UPDATE WD_USER_LOGIN SET user = '$usp' WHERE user='$uname'";
if(mysql_query($duw)){
echo 'De naam is veranderd... Even geduld...';
echo "<br>";
check(); // En hier opnieuw.
echo 'Je bent uitgelogd, wij leiden je door naar de login pagina...';
session_destroy();
header('Refresh: 3; url=');
echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
}
}

?>


Alles staat in het script beschreven. Ik wil dus dat na 1 of 2 seconden de volgende query moet worden uitgevoerd. Aangezien ik denk dat dit met Javascript moet gebeuren, post ik het in deze categorie.
 
PHP hulp

PHP hulp

26/11/2024 15:32:27
 
- Ariën  -
Beheerder

- Ariën -

22/09/2013 20:52:46
Quote Anchor link
Er is ook een sleep() functie in PHP die het script kan vertragen. En de vraag is:
Waarom wil je het vertragen? Voor de eye-candy??

Verder doet deze code me denken aan de pan met spaghetti die ik vanavond gekookt heb, voordat het nog in de zakjes zaten.... ;-)
Gewijzigd op 22/09/2013 20:53:35 door - Ariën -
 

22/09/2013 21:01:29
Quote Anchor link
Ik heb inderdaad niks gesorteerd, heb je helemaal gelijk in. Ik wil het vertragen omdat dat er netter uit ziet.

Als ik sleep(1); er tussenzet, laad mijn hele script gewoon die ene seconde langzamer, zonder dat de regels met komen te staan.

(Btw, smaakte de spaghetti?)
 
- Ariën  -
Beheerder

- Ariën -

22/09/2013 21:05:20
Quote Anchor link
"Omdat het er netter uit ziet", vind ik niet echt een reden.
In mijn ogen is vertraging gewoon onnodig. Iedereen heeft ADSL of snel kabelinternet, waarbij downloads als een speer door het internetlijntje vliegen.....
 

22/09/2013 21:07:09
Quote Anchor link
Om gelijk een hele lap tekst neer te zetten die 3 seconden later weer verdwijnt, ziet er ook niet erg professioneel uit.

Ondanks dat je het 'Niet echt een reden' vind, zou je me toch willen helpen?
 
Wouter J

Wouter J

22/09/2013 21:23:00
Quote Anchor link
Php is server side. Dus een vertraging in php is een vertraging van de server, wat dus resulteert in een langere laadtijd. Wat jij wilt is een vertraging in het renderen van de tekst in de browser. Dat moet met javascript. Waarschijnlijk is mootools/jQuery icm ajax de beste keuze.
 

22/09/2013 21:32:44
Quote Anchor link
Dat zijn talen (Net als Javascript), waar ik niks vanaf weet.

Ik had dit geprobeerd, echter komt die regel er niet te staan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
if(isset($_POST['Wijzigen'])){
$usp = $_POST['nieuwenaam'];
echo 'Processen uitvoeren... Even geduld...';
echo "<br>";
echo '<script type="text/javascript">
var tmFunc = function(){ exec(); };
setTimeout(tmFunc, duration);
function exec(){'
;
$duww = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='$uname'";
if(mysql_query($duww)){
echo "Er zijn 25 diamanten afgeschreven... Even geduld...";
echo '}</script>';
echo "<br>";
}

$duw = "UPDATE WD_USER_LOGIN SET user = '$usp' WHERE user='$uname'";
if(mysql_query($duw)){
echo 'De naam is veranderd... Even geduld...';
echo "<br>";
echo 'Je bent uitgelogd, wij leiden je door naar de login pagina...';
session_destroy();
header('Refresh: 3; url=');
echo "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
}
}

?>

<form method="post" actio
 
- Ariën  -
Beheerder

- Ariën -

22/09/2013 22:35:43
Quote Anchor link
Dat gaat niet werken. Eerst wordt de PHP door de server uitgevoerd, en daarna de Javascript door de browser.
 

22/09/2013 22:41:35
Quote Anchor link
Hoe moet ik het dan doen?
 
Wouter J

Wouter J

22/09/2013 22:48:12
Quote Anchor link
"Dat moet met javascript. Waarschijnlijk is mootools/jQuery icm ajax de beste keuze."
 
Kris Peeters

Kris Peeters

23/09/2013 10:36:19
Quote Anchor link
Leg nog eens uit hoe die timing in mekaar zit.
Wanneer moet er gewacht worden? 1 keer 3 seconden of meerdere keren ?

Kan je een tijdslijn tonen. Met de tekst die je op het scherm wil zien, en telkens hoe veel tijd je tussen elke lijn wil zien
Gewijzigd op 23/09/2013 10:39:53 door Kris Peeters
 

23/09/2013 14:00:08
Quote Anchor link
Als eerst moet de regel: 'Processen uitvoeren... Even geduld...' komen te staan, vanaf het begin. Één seconde later moet komen te staan (Eronder:) "Er zijn 25 diamanten afgeschreven... Even geduld...". Dan weer een seconde later, komt daaronder te staat: 'De naam is veranderd... Even geduld...'. En weer na 1 seconde komt er te staan: 'Je bent uitgelogd, wij leiden je door naar de login pagina...'.
 
Kris Peeters

Kris Peeters

23/09/2013 16:55:15
Quote Anchor link
Okay, kijk hier al eens naar

Dus, ik ga uit van 1 Ajax call. Daarmee moet je maar alles regelen wat er op de server te regelen valt.
Waarschijnlijk wil je daar die andere query ook uitvoeren.

De messages worden gewoon met een setTimeout in de tijd verdeeld

index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['ajax'])) {
  $sql = "UPDATE WD_USER_LOGIN SET Diamant = Diamant - 25 WHERE user='" . mysql_real_escape_string($_POST['uname']) . "'";
  if(mysql_query($sql)) {
    echo 1;
    exit;
  }
}

?>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
  var messages = new Array(
    'Processen uitvoeren... Even geduld...',
    'Er zijn 25 diamanten afgeschreven... Even geduld...',
    'De naam is veranderd... Even geduld...',
    'Je bent uitgelogd, wij leiden je door naar de login pagina...'
  );
  var pointer = 0;  // naald van de "plaat", die naar de juiste tekst wijst.

  $('#set_user').on('submit', function(e) {
    e.preventDefault();   // dit zorgt dat het formulier niet wordt verzonden op klassieke manier
    var data = $(this).serialize();  // $(this) is hier het formulier.  serialize zet de gegevens van het formulier om in een object
    // Ajax verzoek starten
    $.ajax({
      url: 'index.php?ajax=1',
      type: 'post',
      data: data,
      success: function(message) {  // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd.  'message' is de respons van de server
        setTimeout(showMessages, 1000);
      }
    });
    
    // Na het Ajax-verzoek zetten we een berichtje
    $('#messages').html(messages[0]);
    pointer++;
  });
  // recursieve functie.  Zolang er berichten in de playlist staan, wordt deze functie opnieuw getriggerd
  function showMessages() {
    $('#messages').append('<div>' + messages[pointer] + '</div>');
    pointer++;
    if (pointer < messages.length) {
       setTimeout(showMessages, 1000);
    }
  }
});
</script>
<form id="set_user" action="" method="post">
  <div><input name="uname" value="15"> uname </div>
  <div><input name="nieuwenaam" placeholder="Nieuwe gebruikersnaam"></div>
  <div><input type="submit" value="GO"></div>
</form>
<div id="messages"></div>
Gewijzigd op 23/09/2013 17:07:59 door Kris Peeters
 

23/09/2013 19:26:07
Quote Anchor link
Kris,

Bedankt voor de code. Ik heb zelf helemaal geen ervaring met Ajax en Javascript, daarom heb ik enkele vragen:

Wat doet: && isset($_GET['ajax']) ? (Regel 2)
Waarom echo je 1? (Regel 5)
Wat doet var pointer = 0; ? (Regel 19)
Wat betekenen de regels en wat moet ik hieraan veranderen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
    $.ajax({
      url: 'index.php?ajax=1',
      type: 'post',
      data: data,
      success: function(message) {  // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd.  'message' is de respons van de server
        setTimeout(showMessages, 1000);


Er komt bij mij nu 1 regel te staan, namelijk de eerste regel. Klopt dit?
 
Kris Peeters

Kris Peeters

24/09/2013 11:18:32
Quote Anchor link
Okay, je bent wat overdonderd. Nu stel e een vraag over "Wat is Ajax"; en meteen alle kleine onderdelen en alle specifieke oplossingen voor het probleem dat jij stelt.
Daarom is het altijd interessant om te beginnen met kleine voorbeelden.

Wie nog nooit twee bakstenen op mekaar heeft gezet, zal ook niet meteen begrijpen hoe je een kathedraal moet bouwen.
Daarom begint men altijd met een klein muurtje.

Frank Martens op 23/09/2013 19:26:07:
Wat betekenen de regels en wat moet ik hieraan veranderen: ...
$.ajax({ ...


Zoals je ongetwijfeld zelf kan raden, is dat het Ajax deel.

Dus, wat is Ajax?

Je vraagt javascript om contact te nemen met de server.
Dat gebeurt met een verzoek;
Dus, javascript gaat (achter de rug van de gebruiker) surfen naar een pagina op de server. Dus, bv. index.php?ajax=1
Daar, op de server, kan gelijk wat geregeld worden. Je kan daar de database aanpassen; ke kan dingen uploaden; je kan een feed aan berichten halen (bv. om de 10 seconden ga je nieuwe Twitter berichten halen).

Tijdens een Ajax verzoek kan je trouwens ook met de zelfde SESSION en COOKIES werken; je kan POST en GET verzoeken doen ...

Eens de server zijn ding heeft gedaan en een bericht terug stuurt, wordt bij javascript een functie getriggerd.
Namelijk die
success: function(data) {
}

-------

Frank Martens op 23/09/2013 19:26:07:
Wat doet: && isset($_GET['ajax']) ? (Regel 2)


Omdat je misschien nog iets anders van plan bent (met POST).
Ik regel alles op 1 bestand, zijnde index.php. GET-variabelen zijn een goed instrument om de code naar de juiste logische block te sturen.

Je kan dit even goed regelen op verschillende bestanden. bv. alles van Ajax regelen op "ajax.php".

Frank Martens op 23/09/2013 19:26:07:
Waarom echo je 1? (Regel 5)


1 is een symbool voor geslaagd / true.
Dit is een berichtje dat de server terug stuurt naar javascript. Ik doe daar voorlopig niets mee.

Je kan daar even goed andere dingen echo'en en die echo terug tonen ergens op het scherm.

Voorbeeldje: Probeer dit zeker eens uit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_GET['ajax'])) {
...

echo 'database aangepast voor: ' . htmlentities($_POST['uname']);
?>

...
      success: function(message) {  // Als bet verzoek is geslaagd, wordt deze functie uitgevoerd.  'message' is de respons van de server
        $('#messages2').html(message);
        setTimeout(showMessages, 1000);
      }
...
<div id="messages2"></div>
Gewijzigd op 24/09/2013 11:29:05 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.