11528 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je crée ce sujet car je voudrais utiliser ce script que j'ai trouvé par ailleurs sur ce forum mais je voudrais que la page ne se rafraîchisse qu'une seule fois au bout de X secondes..

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setInterval(
function ()
{
$('#PR').load('.index.php').fadeIn("slow");
}, 10000); // refresh every 10000 milliseconds
</script>


Malheureusement cela ne marche pas vraiment car la page se rafraichit sans cesse. Quelqu'un a une idée de comment arranger ça ?

Par avance, merci.
Modifié par cevichero (27 Feb 2020 - 08:56)
Salut,

je ne comprends pas trop ce que tu cherches à faire Smiley sweatdrop
Pourquoi utilises tu la fonction setInterval si tu veux que cela ne se fasse qu'une seule fois ?
La fonction setTimeout semble plus adapté..

Si tu veux quand même utiliser setInterval, tu dois pouvoir simplement changer la valeur d'une variable et vérifier sa valeur au moment de rentrer dans la fonction.

Si cela doit être plus ou moins persistant, on doit pouvoir imaginer une solution a base de localstorage ou sessionstorage , par exemple : https://jsfiddle.net/gvdao68w/
Mathieuu a écrit :
Pourquoi utilises tu la fonction setInterval si tu veux que cela ne se fasse qu'une seule fois ?
La fonction setTimeout semble plus adapté.


Salut Mathieu,
Merci pour ta réponse. Ce n'est pas grave si je n'utilise pas setInterval, même si j'aimerais comrpendre, du moment que ça marche... Smiley cligne
Que dois-je faire avec la fonction setTimeout ? Avec ceci la page ne se charge pas complétement.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setTimeout (
function timedRefresh() {
$('#PR').load('index.php').fadeIn("slow"); }, 1000); // refresh every 10000 milliseconds
</script>


Mathieuu a écrit :
Si cela doit être plus ou moins persistant, on doit pouvoir imaginer une solution a base de localstorage ou sessionstorage , par exemple : https://jsfiddle.net/gvdao68w/

J'avoue comprendre encore moins cette solution ^^°

Ce que je cherche à faire :
Que la page se rafraichisse d'elle-même une seule fois après 1 seconde par exemple.
Si le visiteur rafraîchit la page ou change de langue (par exemple), idem.

Ai-je zappé quelque chose dans le code ci-dessus ?
Je précise que je ne connais pas grand chose en JS et que ce code je l'ai trouvé par ailleurs sur le web.
Il ne faut pas juste trouver des bouts de code par ci par la, il faut comprendre ce que ça fait, et le mieux pour ça c'est souvent de lire la doc : https://developer.mozilla.org/fr/docs/Web/API/WindowTimers/setInterval
Du coup l'idée de setInterval c'est que cela répète une fonction à intervalle régulier et manifestement tu ne veux pas que cela se répète, du coup ce n'est sans doute pas la bonne fonction pour toi Smiley sweatdrop
Mais vu qu'il existe aussi la fonction setTimeout : https://developer.mozilla.org/fr/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout qui va te permettre de faire un appel unique à ta fonction au bout d'un certain temps, cela me semble plus collé à ton besoin d'où ma proposition d'autre fonction.
Du coup un autre exemple avec un setTimeout : https://jsfiddle.net/3e579rhu/
mais pourquoi tu veux rafraichir ? Cela n'a pas de sens d'afficher une page pour vouloir ré-afficher exactement la même page une seconde plus tard. Smiley langue
Mathieuu a écrit :
...
Mais vu qu'il existe aussi la fonction setTimeout : https://developer.mozilla.org/fr/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout qui va te permettre de faire un appel unique à ta fonction au bout d'un certain temps, cela me semble plus collé à ton besoin d'où ma proposition d'autre fonction.
Du coup un autre exemple avec un setTimeout : https://jsfiddle.net/3e579rhu/


Hello,
Suite à tes conseils, j'avais recherché la différence entre setInterval et setTimeout. Smiley smile
Ce que j'ai également compris, c'est que le #PR est in identifiant de balise, du coup je me rends compte que je n'en ai pas besoin.
Pour rappel, ce que je veux faire c'est recharger la page au bout d'une seconde.
J'ai essayé avec cet autre script mais ça fait tourner le code en boucle :
function timedRefresh() {
    if(document.cookie == ""){ 
        var date = new Date();
        date.setTime(date.getTime()+(0.8*1000));
        var expires = "; expires="+date.toGMTString();
        document.cookie = "rafraichir=non;"+expires+"; path=/index.php"; 
        setTimeout(function(){ location.reload(true); }, 800); 
    }
}

Dans l'ensemble je crois comprendre comment ça marche mais je ne vois pas en quoi je me trompe. Un petit coup de main supplémentaire ? Smiley smile

Merci
Modifié par cevichero (01 Mar 2020 - 04:32)
Jean-Pierre-Bruneau a écrit :

Bien que je comprenne pas ce que peux t’apporter un rafraîchissement d'une page , le seul moyen reste un Cookies.
mais dans ses conditions il faut au chargement de la page contrôler en javascript (pas en PHP) que le cookies est présent et son contenu en time.
Ensuite si tu réaffiche la page il faut rafraîchir ton Time dans le cookies avant le rafraichissement.

Bonjour,
Merci pour ta réponse.
Voici ce que j'ai fait mais cela ne fonctionne pas. Où me trompe-je ? Smiley smile
function timedRefresh() {
    var CheminComplet = document.location.href;
    if(document.cookie == ""){ 
        var date = new Date();
        date.setTime(date.getTime()+(0.8*1000));
        var expires = "; expires="+date.toGMTString();
        document.cookie = "rafraichir=non;"+expires+"; path="+CheminComplet+""; 
        setTimeout(function(){ location.reload(true); }, 800); 
    }
}

Merci
cevichero a écrit :


Hello,
Suite à tes conseils, j'avais recherché la différence entre setInterval et setTimeout. Smiley smile
Ce que j'ai également compris, c'est que le #PR est in identifiant de balise, du coup je me rends compte que je n'en ai pas besoin.
Pour rappel, ce que je veux faire c'est recharger la page au bout d'une seconde.
J'ai essayé avec cet autre script mais ça fait tourner le code en boucle :
function timedRefresh() {
    if(document.cookie == ""){ 
        var date = new Date();
        date.setTime(date.getTime()+(0.8*1000));
        var expires = "; expires="+date.toGMTString();
        document.cookie = "rafraichir=non;"+expires+"; path=/index.php"; 
        setTimeout(function(){ location.reload(true); }, 800); 
    }
}

Dans l'ensemble je crois comprendre comment ça marche mais je ne vois pas en quoi je me trompe. Un petit coup de main supplémentaire ? Smiley smile

Merci


Ah mais pour le coup ça change tout Smiley sweatdrop
Quand tu utilisais #PR pour changer seulement un bout de ta page, la page entière ne se rafraîchit pas et du coup l'utilisation du setTimeout est assez simple.

a écrit :

Ce que je cherche à faire :
Que la page se rafraichisse d'elle-même une seule fois après 1 seconde par exemple.
Si le visiteur rafraîchit la page ou change de langue (par exemple), idem.


Je pige toujours pas ce que tu veux faire, mais pour le coup ça me semble foireux car tu ne vas pas pouvoir distinguer si c'est toi qui rafraîchit la page avec ton script ou l'utilisateur qui le fait.

A priori ça va donner un truc comme ça : https://jsfiddle.net/dn1bpr7x/
Mathieuu a écrit :
Ah mais pour le coup ça change tout Smiley sweatdrop
...
Je pige toujours pas ce que tu veux faire, mais pour le coup ça me semble foireux car tu ne vas pas pouvoir distinguer si c'est toi qui rafraîchit la page avec ton script ou l'utilisateur qui le fait.
A priori ça va donner un truc comme ça : https://jsfiddle.net/dn1bpr7x/

J'avais mal exposé mon problème, sorry... En tout cas, ce n'est pas grave si je ne sais pas si la page est rechargée par l'utilisateur ou par le script. Du moment qu'elle est rechargée Smiley ravi
J'ai un peu modifié le script afin de détecter dans quelle page on se trouve. Mais le problème persiste (le script n'entre pas dans le IF) :
function timedRefresh() {
    var CheminComplet = document.location.href;
    if(document.cookie == ""){ // s'il n'existe pas on le crée
        alert("OK");
        var date = new Date();
        date.setTime(date.getTime()+(0.8*1000));
        var expires = "; expires="+date.toGMTString();
        document.cookie = "rafraichir=non;"+expires+"; path="+CheminComplet+""; 
        setTimeout(function(){ location.reload(true); }, 800); 
    }
}


Tu as une idée d'où peut venir l'erreur/problème ?
merci
Modifié par cevichero (03 Mar 2020 - 08:06)
C'est sans doute que ton document.cookie n'est pas vide Smiley sweatdrop (Tu dois pouvoir regarder ça dans la console sans trop de difficulté)

Sinon tu peux utiliser les 2 fonctions getCookie et setCookie que j'avais utilisé dans l'exemple de mon précédant message (pour rappel : https://jsfiddle.net/dn1bpr7x/ )
Mathieuu a écrit :
C'est sans doute que ton document.cookie n'est pas vide Smiley sweatdrop (Tu dois pouvoir regarder ça dans la console sans trop de difficulté)
Sinon tu peux utiliser les 2 fonctions getCookie et setCookie que j'avais utilisé dans l'exemple de mon précédant message (pour rappel : https://jsfiddle.net/dn1bpr7x/ )


Salut,
Tu as raison pour le document.cookie, j'ai regardé dans la console et en effet il n'était pas vide ^^

En utilisant tes recos du précédent message, voici ce que cela donne :
function timedRefresh() {

function setCookie(cname, cvalue, nbsecondes) {
  var d = new Date();
  d.setTime(d.getTime() + (nbsecondes*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  //return "";
  return c.substring(name.length, c.length);
}

setTimeout(function(){
  //on crée le cookie.
  console.log("le cookie n'existe pas");
    setCookie("nom", "valeur", 3);
  //on rafraichit la page
  location.reload(true);
  }, 1000); 

}

Mais idem, la page se rafraichit sans arrêt.
Je crois comprendre que je n'appelle pas la fonction getCookie... mais à partir d'où et comment ?
Modérateur
Sinon pour en revenir a ton setInterval a transformé en setTimeOut , tu peut injecter un paramètre dans la page rafraichie et tester celui-ci .

Le navigateur n'aura pas souvenir d'avoir déjà rechargé la page à sa prochaine visite, si cela t'importe, alors il te faut rester sur l'idée des cookies/session ou éventuellement localStorage()

function getUrlVars() {
  var vars = {};
  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(
    m,
    key,
    value
  ) {
    vars[key] = value;
  });
  return vars;
}
var mytest = getUrlVars()["test"];
if (!mytest) {
  setTimeout(function() {
    window.location = window.location + "?&test=stop";// il faut y mettre une valeur, stop va bien mais  autrechose aussi  */* ?& => si il y a déjà d'autre variable dans l'url 
  }, 1000);
}

Modifié par gcyrillus (04 Mar 2020 - 12:34)
gcyrillus a écrit :
Sinon pour en revenir a ton setInterval a transformé en setTimeOut , tu peut injecter un paramètre dans la page rafraichie et tester celui-ci .

Le navigateur n'aura pas souvenir d'avoir déjà rechargé la page à sa prochaine visite, si cela t'importe, alors il te faut rester sur l'idée des cookies/session ou éventuellement localStorage()

Bonjour Cyrillus,
--- EDIT ---
Je te remercie pour ton retour, j'ai fini par comprendre et c'est une super solution que j'utilsie désormais Smiley lol
Merci.
Modifié par cevichero (06 Mar 2020 - 08:28)
Meilleure solution
salut cevichero j'aimerai savoir comment tu a fait pour que se bout de code fonctionne

function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(
m,
key,
value
) {
vars Smiley key = value;
});
return vars;
}
var mytest = getUrlVars()["test"];
if (!mytest) {
setTimeout(function() {
window.location = window.location + "?&test=stop";// il faut y mettre une valeur, stop va bien mais autrechose aussi */* ?& => si il y a déjà d'autre variable dans l'url
}, 1000);
}

merci d'avance