Rafraichir variable php avec ajax si nécéssaire

WRInaute impliqué
Bonjour, j'ai encore un problème avec Ajax. En effet le code suivant fonctionne parfaitement. Il recharge toute les 2 secondes le contenu d'une page dans une <div>

Ce que je cherche à faire, c'est recharger le contenu de la page dans la div, seulement ci le contenu de la page à changer, histoire de ne pas utiliser de la ressource pour rien.

Voici le code qui fonctionne :
Code:
function getDiv1(MyDiv, MyUrl) { 

var xmlhttp1 = null;  
	 
	var mondiv1 = document.getElementById(MyDiv); 
		 
	if (!mondiv1) { 
  		return 1; 
  	} 
  
    if (xmlhttp1 && xmlhttp1.readyState != 0) { 
        xmlhttp1.abort(); 
	} 
  
	xmlhttp1 = getXMLHTTP(); 
  
    if (xmlhttp1) { 
  
		xmlhttp1.open("GET", MyUrl, true);  
  
     	/* on définit ce qui doit se passer quand la page répondra */ 
      	 
      	xmlhttp1.onreadystatechange = function() { 
      		 
      		if (xmlhttp1.readyState == 4 && xmlhttp1.responseText != '') /* 4 : état "complete" */ { 
		    	mondiv1.innerHTML = xmlhttp1.responseText; 
      		} 
		} 
      	 
      	xmlhttp1.send(null); 
     } 
}

function rafraichir()
{		
  getDiv1('babblebox', '?do=babblebox');
  setTimeout("rafraichir()", 2000);
  
}
window.onload = function() { rafraichir();}


Dans la page html :

<div id="babblebox"></div>
 
WRInaute impliqué
sff a dit:
Ce que je cherche à faire, c'est recharger le contenu de la page dans la div, seulement ci le contenu de la page à changer, histoire de ne pas utiliser de la ressource pour rien.
Et comment sais-tu quand "le contenu de la page a changé" ?

Une fois cette question résolue, tu sauras certainement comment la mettre en place...
 
WRInaute accro
Tu rajoutes un condition "est-ce que mon texte est différent de l'actuel" ici et le tour est joué:

Code:
          if (xmlhttp1.readyState == 4 && xmlhttp1.responseText != '') /* 4 : état "complete" */ {
             mondiv1.innerHTML = xmlhttp1.responseText;
            }
 
WRInaute impliqué
Imaginons que dans la div en question on rafraichit une page affichant les enregistements d'une table sql.

On a juste à vérifier, si le nombre d'enregistrement dans cette table est différent ou pas.

Mais tout ceci se situe coté php, donc comment récupérer ces infos dans le javascript?

Genre si le nombre d'enregistrement a changer on peut faire un echo, une alert()... mais comment récupérer tout ca pour faire une condition dans le js.

Merci à ceux qui m'aideront.
 
WRInaute accro
Tu récupères pas justement, tu as géré ce cas avec xmlhttp1.responseText != '' -_-'

Quand c'est le meme, bah le fichier php ne renvoie rien et donc xmlhttp1.responseText == ''
 
WRInaute passionné
Tu n'as pas de moyen de savoir si ton contenu a changé autrement qu'en interrogeant un fichier externe. Donc y'aura forcément un traitement en PHP.
 
WRInaute impliqué
Suite

Non désolé, mais j'arrive pas.

J'ai une page test2.php avec un echo :

Code:
<?php

echo 'texte';

?>

Et j'ai la page test.php avec le js et la div qui affiche test2.php

Code:
<html>

<script type="text/javascript"> 


// Fonction pour Ajax
	   
function getXMLHTTP()
{
    var xhr=null;

    if (window.XMLHttpRequest) // Firefox et autres.
         xhr = new XMLHttpRequest();
    else if (window.ActiveXObject) // Internet Explorer.
    {
         try
         {
             xhr = new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch (e)
         {
                try
                {
                       xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e1)
                {
                     xhr = null;
                }
         }
     }
     else
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
   return xhr;
}

// Div refresh.

function getDiv1(MyDiv, MyUrl) { 

var xmlhttp1 = null;  
	 
	var mondiv1 = document.getElementById(MyDiv); 
		 
	if (!mondiv1) { 
  		return 1; 
  	} 
  
    if (xmlhttp1 && xmlhttp1.readyState != 0) { 
        xmlhttp1.abort(); 
	} 
  
	xmlhttp1 = getXMLHTTP(); 
  
    if (xmlhttp1) { 
  
		xmlhttp1.open("GET", MyUrl, true);  
  
     	/* on définit ce qui doit se passer quand la page répondra */ 
      	 
      	xmlhttp1.onreadystatechange = function() { 
      		 
      		if (xmlhttp1.readyState == 4 && xmlhttp1.responseText != '') /* 4 : état "complete" */ { 
		    
			mondiv1.innerHTML = xmlhttp1.responseText; 
	
      		}
		} 
      	 
      	xmlhttp1.send(null); 
     } 
}

function rafraichir()
{		
  getDiv1('test2', 'test2.php');
  setTimeout("rafraichir()", 1000);
  
}
window.onload = function() { rafraichir();}


</script>
 
</script> 
<body> 
<DIV ID="test2">


</div>
</body> </html>

Je vois vraiment pas comment faire pour que le js arrête de charger toutes les seconde test2.php tant que cette page n'a pas changé.
 
WRInaute accro
le seul truc que tu peut gagner est de ne pas changer le contenu de ta page html si le contenu renvoyé est vide (parce que pas de changement) c'est de la BP que tu gagnera mais tu sera forcé de faire tourner qque chose côté serveur pour savoir si oui ou non qque a changé dans la base.
 
Discussions similaires
Haut