Pb de refresh sur ajax

Résolu
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

4 réponses

avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Quelle est ta fonction rafraichir() ?
0
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Remplace setTimeout par setInterval.
0
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
génial ca a l'air de fonctionner maintenant !! un immense merci à toi !!!
0
panthere31 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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