Pb de refresh sur ajax

Résolu
panthere31 Messages postés 9 Statut Membre -  
panthere31 Messages postés 9 Statut Membre -
hello à tous,

voilà je sèche sur un truc et je pige pas trop pourquoi...

dans une div est affiché un fil d'actu 1 ou 2 selon click ou chargement de la page

il y a egalement possibilité de passer de l'un à l'autre... lorsque je clique sur 2 j'ai bien mon fil d'actu qui doit se recharger ttes les X secondes mais au rechargement il revient sur le premier fil d'actu... :'(
il rappelle pas le dernier paramètre passé dans lors de l'appel de la fonction (si je pige bien).

Voici mon script :

<script language="javascript" type="text/javascript"> 

function actu(quoi) { 
        if (window.XMLHttpRequest) xhr = new XMLHttpRequest(); 
        else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
        else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...'); 
        
        xhr.open('GET','filactu.php?rss=' + quoi,true); 
      xhr.onreadystatechange = function(){ 
            if (xhr.readyState == 4) { 
                      document.getElementById("lesnews",true).innerHTML=xhr.responseText; // ici sa s'incrute dans la div <div id="lesnews"></div> mais peut etre <td id="page">  ... Ici c'est L'id l'important 
                      var timer=setTimeout("actu('" + quoi + "')",10000); // rafraichie toute les 25secs 
              } 

      } 
                
        xhr.send(null); 
} 



</script> 


au chargement :

<body onload="javascript: actu('1');"> 


et les liens :

<a href="javascript: actu('1');">actu 1</a> - <a href="javascript: actu('2');">2</a> 


pas de pb sur les div

si qq un a une eclaircie à me proposer !

Merci

4 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Fais une fonction qui se charger de changer de flux et une autre qui se charge de le rafraichir. Il faut stocker le numéro du flux dans une variable accessible par les deux fonctions, donc une variable externe à ces deux fonctions.

    Voici la structure :
    var numeroFlux = 1; // Par défaut, ça sera le premier
    
    function changerFlux(numero) {
        numeroFlux = numero;
        rafraichir();
    }
    
    function rafraichir() {
        // ...
    }
    0
    1. panthere31 Messages postés 9 Statut Membre
       
      grand merci à toi l'idée est bonne mais lance je clique pour changerFlux ca se passe bien ok mais au rafraichissement suivant il revient sur le flux 1 pusi resaute sur le 2

      j'aimerai supprimer ce pb
      0
  2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Quelle est ta fonction rafraichir() ?
    0
    1. panthere31 Messages postés 9 Statut Membre
       
      il ne doit avoir que 2 fonctions non ?

      une pour afficher/rafraichir le fil d'actu

      une autre pour le changer => afficher/rafraichir.... me trompe je ?
      0
  3. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Il y a deux fonctions :

    La fonction changerFlux(numero) : elle se charge de modifier la variable numeroFlux accessible par les deux fonctions, et elle lance le rafraichissement pour le nouveau flux (ce n'est pas cette fonction qui fait la requête AJAX, c'est la deuxième (on appelle donc la deuxième dans la première))

    La fonction rafraichir() : elle rafraichis le bon flux grâce à la variable numeroFlux.
    0
    1. panthere31 Messages postés 9 Statut Membre
       
      Voici ce que j'ai là :

      <script language="javascript" type="text/javascript">
      
      function changerFlux(numero) {
          numeroFlux = numero;
          actu(numeroFlux);
      }
      
      function actu(quoi) {
      		var quoi = (quoi == null) ? "club" : quoi; 
              if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
              else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
              else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
              
              xhr.open('GET','filactu.php?rss=' + quoi,true);
      		xhr.onreadystatechange = function (){
      				if (xhr.readyState == 4) {
      		                document.getElementById("lesnews",true).innerHTML=xhr.responseText; // ici sa s'incrute dans la div <div id="lesnews"></div> mais peut etre <td id="page">  ... Ici c'est L'id l'important
      
      		        		var timer=setTimeout("actu('" + quoi + "')",10000); // rafraichie toute les 25secs		        
      
      		        }
      	        
      
      		}
                     
              xhr.send(null);
      }
      
      
      
      </script>
      
      

      je dois avoir faux dans mon raisonnement....
      0
  4. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Tu as oublié de déclaré la variable en dehors des deux fonctions.
    Pour le setTimeout, je le mettrais plutôt à l'extérieur de la fonction.

    var numeroFlux = 1;
    var timer;
    
    function changerFlux(numero) {
        numeroFlux = numero;
        actu();
    }
    
    function actu() {
    	var quoi = (numeroFlux == null) ? "club" : numeroFlux;
    	
    	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
    	else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
    	else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
    
    	xhr.open('GET','filactu.php?rss=' + quoi,true);
    	xhr.onreadystatechange = function () {
    		if (xhr.readyState == 4) {
    			document.getElementById("lesnews",true).innerHTML = xhr.responseText;
    		}
    	}
    
    	xhr.send(null);
    }
    
    window.onload = function() {
    	timer = setTimeout("actu();",10000);
    };
    0
    1. panthere31 Messages postés 9 Statut Membre
       
      grand merci
      ca progresse
      dernier hic maintenant

      une fois que je change le flux, X secondes apres il fait bien le rafraichissement mais ensuite non...

      j'ai besoin qu'il tourne en boucle
      0
    2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Remplace setTimeout par setInterval.
      0
    3. panthere31 Messages postés 9 Statut Membre
       
      génial ca a l'air de fonctionner maintenant !! un immense merci à toi !!!
      0
    4. panthere31 Messages postés 9 Statut Membre
       
      voici donc le code final :

      <script language="javascript" type="text/javascript">
      
      var numeroFlux = 1;
      var timer;
      
      function changerFlux(numero) {
          numeroFlux = numero;
          actu();
      }
      
      function actu() {
      	var quoi = (numeroFlux == null) ? "1" : numeroFlux;
      	
      	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
      	else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
      	else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
      
      	xhr.open('GET','filactu.php?rss=' + quoi,true);
      	xhr.onreadystatechange = function () {
      		if (xhr.readyState == 4) {
      			document.getElementById("lesnews",true).innerHTML = xhr.responseText;
      		}
      	
      	}
      
      	xhr.send(null);
      }
      
      window.onload = function() {
      	timer =  setInterval("actu();",900000);
      };
      </script>
      
      


      la div mise à jour est nommée lesnews

      Encore merci pour cette aide !!
      0