11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Voila je dois mettre a jour une page toutes les 5 secondes avec des données provenant d'une base de données. Pour ce faire, j'utilise l'objet HTTPrequest de javascript qui me permet d'envoyer une requete mysql sans recharger ma page puis je change mes attributs sur ma page web avec le DOM . Ensuite avec setTimeout, je reitère mon code a l'infini toutes les 5 secondes.Ainsi ma page devrait etre mis a jour toutes les 5 secondes sans rechargement.
TOut ceci fonctionne parfaitement sous forefox ou mozilla. Mais ca ne fonctionne pas sous IE.

La seul différence pour IE est que au lieu de créer l'objet avec:
http = new XMLHttpRequest();
on le crée avec
http = new ActiveXObject("Microsoft.XMLHTTP");

D'apres mes recherches, un activeX utilise les registres de mon ordi et je suppose qu il sauvegarde la valeur. En fait sous IE, mon script java ne va meme plus executér ma requete mysql dans son fichier:



function essai(){	
 	if (window.XMLHttpRequest) { //Si !IE
		http = new XMLHttpRequest();
	} else if (window.ActiveXObject) { //Sous IE
	 	http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	//APpel de la fonction qui lance la requete
 	majActeur();
	// Recursivité pour actualiser ma page toutes les 5 secondes
	window.setTimeout("essai()",5000);
 }

  
function majActeur() {
  var rechRapide = document.getElementById("rapide").value;
  http.onreadystatechange = handleHttpResponse;
  // sous IE j'ai l'impression qu'il execute cette ligne une seule fois. (la premiere fois enfait)
  // Ensuite il ne va plus dans le fichier recupActeur.php
  http.open("GET", "recupActeur.php?recherche="+ escape(rechRapide));  
  http.send(null);
  }


function handleHttpResponse() {
  if (http.readyState == 4) {
	var results = http.responseText;
   	sh=document.getElementById("nom");
   	sh.innerHTML = http.responseText;
    }}





Si quelqu'un pouvait m'aider, ca fait pas mal d'heures que je cherche un peu partout et je ne trouve. C est bizarre il n'existe pas de destructeur d'objet pour ActiveXObject. Enfin bon je comprend plus rien Smiley ohwell
Modifié par johan85 (27 May 2005 - 11:21)
Salut,
pour le code c'est [ code] [/ code] et non <code> </code> Smiley smile , j'ai corrigé.

Pour ton problème, je pense que c'est le truc qu'IE doit recréer l'objet à chaque fois contrairement à firefox.

Je sais plus trop où j'ai lu ça Smiley ohwell mais tente cette piste.
Desolé

Je comprend pas, je recrée bien l'objet a chaque fois vu que mon constructeur se trouve dans fonction re-appelée toutes les 5 secondes.Donc toutes les 5 secondes je recrée l'objet non? Smiley decu

J ai remarqué si mon parametre "rechRapide" change, la page se met a jour sous IE mais si ensuite il revient a son ancienne valeur la page garde ce qu elle affichait precedement (en fait l'objet doit avoir la valeur en memoire quelque part et je ne sais pas comment réinitialiser mon objet ou meme le détruire).

La je suis dans le flou total mais je ne connais aucne autre méthode...
Modifié par johan85 (27 May 2005 - 11:40)
Bonjour,

Cela tiens à la méthode GET que tu emplois, ça ne concerne qu'IE.

Sous Gecko ça ne pose aucun soucis mais IE rechigne à gérer correctement des valeurs GET recursives quand bien même tu recré ton objet à chaque fois.

L'objet XMLHttpRequest étant une création Miscrosoft il doit y avoir une raison valable sous IE mais je n'en connais pas le détail (Si quelqu'un sait...) Smiley smile

Qui à raison, qui à tort :
Modifie ta fonction en employant POST.

JP
Modifié par jpv (27 May 2005 - 13:34)
Merci merci et re merci

ca marche Smiley lol Smiley lol Franchement j'ai cherché je crois, partout mais je n'aurais jamais pensé que cela puisse venir de la méthode employée.

Bon j 'ai perdu 1 jours avec ce truc mais maintenant c est cool ca marche !!!!!!
Modifié par johan85 (27 May 2005 - 14:23)
Re bonjour
donc maintenant que mon probleme précédent est résolu, j'ai un second petit soucis. Voila mon setTimeout me fait une erreur depuis que j'ai des arguments dans ma fonction main(temp,valid). Je ne comprend pas normalement on doit laisser la fonction entre guillement non?
J'ai essayer en mettant

window.setTimeout("main("+temp+","+valid+");",5000); 


mais ca ne marche pas non plus. Voila la partie erronée



function main(temp,valid){
	/** ICI NORMALEMENT IL Y A DU CODE*/
 	sendata(temp,valid);
	window.setTimeout("main(temp,valid);",5000);
 }




Merci pour votre aide Smiley ravi
Salut

En fait j'ai trouvé sur internet que justement setTimeout gère mal ce problème d'argument. La solution qu il conseille est



function main(temp,valid){
 	/**CODE*//
	sendata(temp,valid);

	setTimeout(function() { main(temp,valid); },5000);
 }



Pour mon cas.

Voila si ca peu aider d'autres personnes Smiley smile En tout c est pas evident de trouver ca tout seul je trouve!!!!

Merci pour vos conseils
Smiley biggrin