Pb de refresh sur ajax

Résolu/Fermé
panthere31 Messages postés 9 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010 - 13 mai 2010 à 12:33
panthere31 Messages postés 9 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010 - 13 mai 2010 à 16:48
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 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
13 mai 2010 à 14:05
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 jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 14:29
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 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
13 mai 2010 à 15:27
Quelle est ta fonction rafraichir() ?
0
panthere31 Messages postés 9 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 15:32
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 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
13 mai 2010 à 15:36
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 jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 15:39
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 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
13 mai 2010 à 15:46
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 jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 15:58
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 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
13 mai 2010 à 16:00
Remplace setTimeout par setInterval.
0
panthere31 Messages postés 9 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 16:06
génial ca a l'air de fonctionner maintenant !! un immense merci à toi !!!
0
panthere31 Messages postés 9 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 16:48
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