begin process at 2012 05 29 14:04:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

Framework

 > 

Ajax

 > 

Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

vendredi 2 septembre 2011 à 12:22:24 | Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

pacadebord

Bonjour,

Je suis en train de concevoir un outil qui, au clic sur un bouton, parcours les lignes d'un tableau, chaque ligne contenant 3 colonnes (pour simplifier) : une valeur "maREf" et deux cases à cocher.
Pour chaque ligne et pour chaque case cochée, je passe maRef en paramètre à une cgi en VB6 (il y en a donc deux différentes) à l'aide de XMLHttpRequest synchrone. Je remplace, au final, la case cochée par le résultat true ou false du responseText de ma requête.

Code Javascript :
function getXhr(){
	var xhr=null;
	if(window.XMLHttpRequest)
		xhr = new XMLHttpRequest();
	else if(window.ActiveXObject){
		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;
}

function lance(){
var montbl = document.getElementById("idtabclt");
var montblbody = montbl.getElementsByTagName("tbody")[0];

	for (var i=0; i < montblbody.rows.length; i++){
		var refcpt = montblbody.rows[i].cells[1].innerHTML
		if (montblbody.rows[i].cells[6].getElementsByTagName('input')[0].checked){
			document.getElementById("ge" + refcpt).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
			envoi_cg1("cgi/clo/cgi_retsouf_clo.exe?act=clo&cpt=" + refcpt + "&typ=ge" + "&uid=" + Math.random(), "ge" + refcpt);
		}
		if(montblbody.rows[i].cells[7].getElementsByTagName('input')[0].checked){
			document.getElementById("av" + refcpt).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
			envoi_cg1("cgi/clo/cgi_retsouf_clo.exe?act=clo&cpt=" + refcpt + "&typ=av" + "&uid=" + Math.random(), "av" + refcpt);
		}
	}
}

function envoi_cg1(url, monid){
	var xhr1 = getXhr()	
	document.getElementById(monid).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
	xhr1.open("GET", url, false);
	xhr1.send(null);
	if(xhr1.status == 200){			
		if (xhr1.responseText.toLowerCase() == "true"){
			document.getElementById(monid).innerHTML = "<img border='0' src='images/true.gif'>";
		}
		else {
			document.getElementById(monid).innerHTML = "<img border='0' src='images/false.gif'>";
		}		
	}
}

function envoi_cgi2(url, monid){
	var xhr2 = getXhr()	
	document.getElementById(monid).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
	xhr2.open("GET", url, false);
	xhr2.send(null);
	if(xhr2.status == 200){			
		if (xhr2.responseText.toLowerCase() == "true"){
			document.getElementById(monid).innerHTML = "<img border='0' src='images/true.gif'>";
		}
		else {
			document.getElementById(monid).innerHTML = "<img border='0' src='images/false.gif'>";
		}
	}	
}


J'observe, quand je lance le bidule sous FF6, que tout fonctionne. Quand je dis que ça fonctionne, c'est que chaque requête synchrone renvoi un résultat et que ma case à cocher est bien remplacée. On peut donc suivre la progression de l'ensemble. Je suis plutôt content de moi sauf que sous IE6 et IE8 (sur IE en général donc ?) ça freeze dès le début. Ca freeze tellement que même le bouton n'est pas relaché ! Donc pas le côté progression que j'aime tant.

Je sais, je ne suis pas raisonnable. IE6, VB6 et Jean Paul 6 c'est du passé. C'est pourtant une réalité en 2011 dans ma boîte (avec windows 2000, arg).

Merci aux généreux bienfaiteurs.

Pac
vendredi 2 septembre 2011 à 13:27:26 | Re : Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

dvwyns

Salut,

Je ne sais plus dans quel cas innerHtml ne fonctionne pas sous IE, mais je pense que le problème vient de là.

Essaie l'équivalent jquery
Code Javascript :
$("#id").html(var)


Tu peux télécharger la librairie jquery ici

Je te concède qu'ajouter cette librairie augmentera le poids de ta page, mais en tout cas en premier lieu ça te permettra de voir si le problème vient de là.

Cordialement
vendredi 2 septembre 2011 à 13:54:34 | Re : Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

pacadebord

Je pense qu'innerHTML fonctionne puisqu'à la fin du traitement, j'obtiens pareil que sous Firefox : mes cases à cocher ont été remplacées. Cela dit me mettre à jquery serait peut-être une bonne chose.


Pac
vendredi 2 septembre 2011 à 16:41:15 | Re : Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

Zobibol

Membre Club
bien le bonjour, il n'est pas évident de tester comme ça, mais il semblerait que ce soit d'un point de vue gestion de la requête qu'il y ait une erreur:

j'aurais plus aborder le problème comme ceci:
Code Javascript :
function getXhr(){
	var xhr=null;
	if(window.XMLHttpRequest)
		xhr = new XMLHttpRequest();
	else if(window.ActiveXObject){
		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;
}

function lance(){
var montbl = document.getElementById("idtabclt");
var montblbody = montbl.getElementsByTagName("tbody")[0];

	for (var i=0; i < montblbody.rows.length; i++){
		var refcpt = montblbody.rows[i].cells[1].innerHTML
		if (montblbody.rows[i].cells[6].getElementsByTagName('input')[0].checked){
			document.getElementById("ge" + refcpt).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
			envoi_cg1("cgi/clo/cgi_retsouf_clo.exe?act=clo&cpt=" + refcpt + "&typ=ge" + "&uid=" + Math.random(), "ge" + refcpt);
		}
		if(montblbody.rows[i].cells[7].getElementsByTagName('input')[0].checked){
			document.getElementById("av" + refcpt).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
			envoi_cg1("cgi/clo/cgi_retsouf_clo.exe?act=clo&cpt=" + refcpt + "&typ=av" + "&uid=" + Math.random(), "av" + refcpt);
		}
	}
}

function envoi_cg1(url, monid){
	var xhr1 = getXhr()	
	document.getElementById(monid).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
	xhr1.open("GET", url, false);
	xhr1.send(null);
	xhr1.onreadystatechange= function (ev){
		// tout d'abord on ne s'intérresse qu'à la réponse ok.
		if (xhr1.readyState == 4){
			if(xhr1.status == 200){			
				if (xhr1.responseText.toLowerCase() == "true"){
					document.getElementById(monid).innerHTML = "<img border='0' src='images/true.gif'>";
				}
				else {
					document.getElementById(monid).innerHTML = "<img border='0' src='images/false.gif'>";
				}
			}
		}		
	}
}

function envoi_cgi2(url, monid){
	var xhr2 = getXhr()	
	document.getElementById(monid).innerHTML = "<img border='0' src='images/ajax-loader.gif'>";
	xhr2.open("GET", url, false);
	xhr2.send(null);
	
	xhr2.onreadystatechange= function (ev){
		// tout d'abord on ne s'intérresse qu'à la réponse ok.
		if (xhr2.readyState == 4){
			if(xhr2.status == 200){			
				if (xhr2.responseText.toLowerCase() == "true"){
					document.getElementById(monid).innerHTML = "<img border='0' src='images/true.gif'>";
				}
				else {
					document.getElementById(monid).innerHTML = "<img border='0' src='images/false.gif'>";
				}
			}
		}		
	}
}


l'utilisation de onreadystatechange change probablement la donne. Et est plus en conformité (je pense avec IE... pas tester donc... pas certain que cela résolve le problème, en outre, c'est le traitement qu'il faut faire.).

[o-_-o]
lundi 5 septembre 2011 à 15:21:03 | Re : Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

pacadebord

Salut Zobibol,

Merci pour ta réponse, hélas le script ne passe même plus dans le bloc onreadystatechange, ni avec FF6 ni avec IE.


Pac
lundi 5 septembre 2011 à 15:36:24 | Re : Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

pacadebord

Mais readyState == 4 et status == 200 quand la requête synchrone est terminée

Pac
lundi 19 décembre 2011 à 11:59:36 | Re : Modif innerHTML d'un div entre 2 XMLHttpRequest synchrones sous IE

pacadebord

Réponse acceptée !

Bonjour à tous,

Je reviens sur la question après quelque temps. Comme l'a dit Zobibol, ma gestion du onreadystatechange n'était pas terrible. J'ai enfin trouvé la réponse à l'aide de la technique du CALLBACK !

Pac


Cette discussion est classée dans : document, getelementbyid, innerhtml, monid, if


Répondre à ce message

Sujets en rapport avec ce message

Barre de progression Javascript [ par AurelR ] BonjourActuellement j'essaye d'envoyer un fichier sur mon serveur (sa j'y arrive) mais j'aimerais afficher une barre de progression.En cherchant un pe Encore des erreurs ! [ par nicomilville ] Salut,Et oui, c'est encore moi, vous devez vous dire que je suis un nul, c'est peut être vrai, lol J'ai encore des erreurs sur mon code... Si ça co ouvrir/fermer une div et fusionner deux fonctions...help [ par ornorme ] bonjour à celui qui essaira de résoudre mon pti problème!(c'est ma deuxième question sur ce forum..en éspérant que la solution récupération de données SQL dans une infobulle [ par creaDB ] Bonjour tout le monde, voilà je débute avec l'infoBulle Javascript et je cherche à y inclure un résultat de requete php/mysql. Je m'explique, je souha défilement images effet fondu, ne marque que sur FIREFOX [ par fulltrip ] Bonjour,Comme il est explicité ci-dessus je n'arrive pas à faire marcher mon script JAVASCRIPT sur IE.Si quelqu'un peut voir ou se situe le problème j Accés à une page via user et mot de passe avec ajax et php [ par developvbdebut ] BonsoirVoici mon problème.Au départ je suis sur la page index.html, en saissant le bon nom utilisateur et le mot de page, je veux acceder à la page su Probleme avec IE et Opera [ par SuperChouquette ] Bonjour, je suis débutant et je tente de faire un script qui permette d'effectuer une recherche dans une liste, celui- ci fonctionne parfaitement sous probleme controle de saisie avec du javascript dans un formulaire html.php [ par suethi75 ] BonjourJe controle les champs obligatoires dans mon formulaire cependant cela ne marche pas.Voici mon code javascript: function verifForm(){  if (docu document.body vs document.write [ par arnaultp ] Bonjour à tous!Je n'arrive toujours pas très bien à comprendre ce que font document.body et document.write.Cela fait seulement 2 semaines que je code Probleme avec IE [ par theopil ] Voila sous firefox sa marche niquel , mes pas sous IE , et j tourne en rond et je ne trouve pas l'erreurfunction affi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales