2010-01-10 3 views
1

Je viens de trouver un extrait de code aujourd'hui car j'ai besoin d'actualiser une de mes pages pour qu'un script PHP puisse s'exécuter à nouveau pour afficher de nouveaux résultats de la DB toutes les minutes.Javascript: Forcer un rechargement depuis le serveur, comment?

if (document.images) 
    setTimeout('location.reload(true)',1000*60*15); // forces a reload from the server 
else 
    setTimeout('location.href = location.href',1000*60*15); // just reloads the page 

Quelle est la différence entre les deux? Je veux dire qu'ils ne rechargent pas la page? Comment le code JS peut-il forcer un rechargement du serveur?

Merci à tous

Répondre

4

L'extrait sera essayer de faire un reload pleine page, si des images sur la page, sinon il suffit de faire un redirigent à la même page elle-même.

En utilisant location.reload(true);, l'argument true entraîne toujours le rechargement de la page à partir du serveur.

Mais cette condition est toujours true, puisque document.images est un HTMLCollection, et il ne sera jamais évaluer à false, même s'il n'y a pas d'images sur la page, les seules valeurs qui évaluent à false dans une expression booléenne sont null, undefined , 0, NaN, une chaîne vide, et bien sûr false.

Si vous voulez faire que le travail de condition, vous devriez vérifier la propriété length de document.images, la propriété length est numérique et cela signifie qu'il évaluera à false que lorsque sa valeur est 0:

if (document.images.length) { 
    setTimeout(function() { 
     location.reload(true); // forces a reload from the server 
    }, 1000*60*15); 
} else { 
    setTimeout(function() { 
     location.href = location.href; 
    }, 1000*60*15); // just reloads the page 
} 

Notez que j'utilise maintenant des expressions de fonction au lieu de chaînes comme premier argument de setTimeout, si des chaînes sont utilisées, le code sera évalué à l'exécution (équivalent à un appel eval) et cela n'est pas vraiment considéré comme une bonne pratique.

+0

Wow - merci CMS! Son limpide maintenant et je n'aurais pas testé la longueur de l'image! Merci encore. :) – Abs

+0

Juste une question rapide - et si ma page a des variables GET dedans? Puis-je transmettre cela aussi ou dois-je utiliser le href? – Abs

+0

Juste essayé. Les variables GET seront conservées. – Abs

Questions connexes