[Résolu]Problème avec Ajax

u94082

WRInaute occasionnel
Bonsoir à tous,

J'utilise actuellement un script ajax qui fonctionne très bien avec Firefox mais pas avec Internet Explorer (5,6 et 7)...

J'ai bien essayé de le débugguer avec la "console" d'IE mais rien n'y fait, Firefox quand à lui ne retourne pas d'erreur ; Etant un peu perdu pourriez vous me donner un coup de main ?

Le script en question :
Code:
var http_request = false;
function makeRequest(url, parameters, resultdiv, loader) {
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
        	//if (http_request.overrideMimeType) {
			//http_request.overrideMimeType('text/xml');
			//http_request.overrideMimeType('text/html; charset=ISO-8859-1');
		//}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
            		try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
            	} catch (e) {}
         }
      }
      if (!http_request) {
		alert('Votre navigateur ne supporte pas la technologie XMLhttp !');
		return false;
      }
      //http_request.onreadystatechange = alertContents;
      http_request.open('GET', url + parameters, true);
      
      http_request.onreadystatechange = function alertContents() {		
	if (http_request.readyState == 1) {
        	document.getElementById(loader).style.display = 'block';
		document.getElementById("loadingtxt").style.display = 'block';
        }
     	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
            		//alert(http_request.responseText);
            		result = http_request.responseText;
            		document.getElementById(resultdiv).innerHTML = result;
			document.getElementById(loader).style.display = 'none';            
			document.getElementById("loadingtxt").style.display = 'none';
         	} else {
            		alert('Une erreur s\'est produite !');
         	}
      	}
      }
      http_request.send(null);
}

D'avance merci pour votre aide
 

UsagiYojimbo

WRInaute accro
Avec IE5 déjà l'Ajax je pense que tu peux oublier, vu comment ce navigateur supporte le JS.

Pour ce qui est d'IE5 et IE6, tu as essayé de faire du debbugage pas à pas en mettant des alert() javascript à chaque étape du code pour voir à partir d'où tu as un problème.
 

Jeviensderio

WRInaute passionné
Pourquoi ne pas utiliser un script tout fait, comme anaa.eu, avec les fonctions de base et qui est certain de fonctionner sur tous navigateurs....

Mais si c'est la mise à jour de la page qui ne fonctionne pas, on ne peut en juger, cela dépend comment le script est utilisé (formulaire ou autres).
 

u94082

WRInaute occasionnel
Bonjour et merci pour vos réponses !

Pour IE5 ok j'oublie...
J'ai bien essayé de débugguer avec des alert() un peu partout et pas moyen :?
C'est quand même symptomatique ! Quelle poisse cet IE... Ce que je n'arrive vraiment pas a comprendre c'est pourquoi Firefox ne retourne aucune erreur...
J'utilise ce script aussi bien à partir de formulaire (onsubmit()) qu'avec des liens appelant la fonction...
La fonction se lance jusqu'à faire apparaître l'animation de chargement puis se fige.

Pour anaa.eu j'ai regardé mais c'est pas l'idéal niveau poids (+ de 8ko), après c'est sur que si je n'ai pas le choix ben...

Il n'y a rien dans mon script qui à première vue est incompatible IE ?
Je n'ai pas beaucoup d'expérience donc peut être que la structure du "bouzin" n'est pas bonne ou autre...

Merci pour votre aide
 

zeb

WRInaute accro
Re: Problème avec Ajax

Code:
var http_request = false;
function makeRequest(url, parameters, resultdiv, loader) {
	http_request = =null;
	if (window.XMLHttpRequest) { 
		http_request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		http_request = new ActiveXObject("Microsoft.XMLHTTP");
	}
      if (!http_request) {
		alert('Votre navigateur ne supporte pas la technologie XMLhttp !');
		return false;
      }
      //http_request.onreadystatechange = alertContents;
      http_request.open('GET', url + parameters, true);
      
      http_request.onreadystatechange = function alertContents() {		
	if (http_request.readyState == 1) {
        	document.getElementById(loader).style.display = 'block';
		document.getElementById("loadingtxt").style.display = 'block';
        }
     	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
            		//alert(http_request.responseText);
            		result = http_request.responseText;
            		document.getElementById(resultdiv).innerHTML = result;
			document.getElementById(loader).style.display = 'none';            
			document.getElementById("loadingtxt").style.display = 'none';
         	} else {
            		alert('Une erreur s\'est produite !');
         	}
      	}
      }
      http_request.send(null);
}
 

UsagiYojimbo

WRInaute accro
Tu as une page en ligne où on peut jeter un oeil ?

Quand je faisais de l'AJAX à la mano (avant de m'essayer à prototype et jquery), je partais du script suivant :

Code:
		var xhr_object = null; 	 
		if(window.XMLHttpRequest) // Firefox 
			xhr_object = new XMLHttpRequest(); 
		else if(window.ActiveXObject) // Internet Explorer 
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
		else { // XMLHttpRequest non supporté par le navigateur 
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		return; 
		}  
		xhr_object.open("GET", "loaditem.php?id="+id, false); 
		xhr_object.send(null); 
		if	(xhr_object.readyState == 4)
		{
			if (xhr_object.responseText!='')
			{
				document.getElementById("item").innerHTML = document.getElementById("item").innerHTML + xhr_object.responseText;
			}
		}
	}

Si ca peut t'aider...
 

u94082

WRInaute occasionnel
@Zeb : Ca ne fonctionne pas :( Cette fois ci rien ne se lance, un peu comme si il n'y avait pas de script... En enlevant un "=" juste avant le "null" à la troisième ligne ça revient au fonctionnement précédent.

@UsagiYojimbo : Malheureusement j'suis en local mais je vais essayer de la mettre en ligne, merci pour ta base de script avec un peu de bol j'arriverai à l'adapter.

En tout cas merci beaucoup vous répondez rapidement et c'est super !

EDIT : HOURRA ! C'est en fait un truc tout c*n : dans le code c'est la ligne
Code:
result = http_request.responseText;
document.getElementById(resultdiv).innerHTML = result;
à modifier comme ça
Code:
document.getElementById(resultdiv).innerHTML = http_request.responseText;
Bon ben c'est génial :) :) Encore merci !

PS : C'est drôle cette bouse d'IE est bien plus rapide que Firefox pour executer la fonction...
 

zeb

WRInaute accro
antinomx a dit:
PS : C'est drôle cette bouse d'IE est bien plus rapide que Firefox pour executer la fonction...
pense qu'IE évolue dans un environnement pré chargé pour lui avec toute l'api windobe derrière.
Les autres navigateurs doivent travailler en milieu hostile ;-)
 

UsagiYojimbo

WRInaute accro
antinomx a dit:
EDIT : HOURRA ! C'est en fait un truc tout c*n : dans le code c'est la ligne
Code:
result = http_request.responseText;
document.getElementById(resultdiv).innerHTML = result;
à modifier comme ça
Code:
document.getElementById(resultdiv).innerHTML = http_request.responseText;

En fait je pense que c'est surtout du au fait que la variable result n'était pas déclarée :

Code:
var result = http_request.responseText;
document.getElementById(resultdiv).innerHTML = result;

aurait sans doute mieux fonctionné.
 

u94082

WRInaute occasionnel
zeb a dit:
pense qu'IE évolue dans un environnement pré chargé pour lui avec toute l'api windobe derrière.
Les autres navigateurs doivent travailler en milieu hostile ;-)

Merci pour cet éclaircissement !

UsagiYojimbo a dit:
En fait je pense que c'est surtout du au fait que la variable result n'était pas déclarée :

Code:

var result = http_request.responseText;
document.getElementById(resultdiv).innerHTML = result;


aurait sans doute mieux fonctionné.

Bien vu ! :) Firefox est vraiment peace alors...

Merci beaucoup pour votre aide !
 

Discussions similaires

Haut