IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] [IE6] Post en Ajax


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [AJAX] [IE6] Post en Ajax
    Bonjour a tous,

    Je bute actuellement sur un soucis de javascript a cause de ce satané ie6.
    Mon script ajax fonctionne sous: Firefox (et Netscape), IE7, Opera, Safari et consort, mais ie6 fais (une fois de plus?) son relou.
    Les objets activeX sont pourtant bien activés en particulier xmlhttprequest qui nous interesse, ainsi que le javascript.

    Voici ma fonction init qui me retourne mon objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    function init() {
    	var xhr = null; // L'objet qui contiendra le XMLHttpRequest
     
    	if(window.XMLHttpRequest) { // Firefox et autres
    		xhr = new XMLHttpRequest();
    	} else if(window.ActiveXObject) { // Internet Explorer 
    		try {
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (Msxml2E) {
    			try {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (MicrosoftE) {
    				xhr = null;
    			}
            }
    	}
     
    	if(xhr === null) { // XMLHttpRequest non supporté par le navigateur 
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	   xhr = false; 
    	}
     
    	return xhr;
    }
    voici une des fonctions qui ne passent pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    function updateMinistereList() {
    	alert('init');
    	var xhr = init(); // Récupère le XMLHttpRequest
    	var i;
    	var keys;
    	var valeurs;
     
    	document.getElementById("loader").className="voir";
     
    	xhr.open("POST", "ajax/updateListeMinistere.php", true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	sel = document.getElementById('type');
    	type = sel.options[sel.selectedIndex].value;
     
    	xhr.onreadystatechange = function() { 
    		if(xhr.readyState == 4 && xhr.status == 200) {
    			document.getElementById("loader").className="cacher";
    			valeurs = document.getElementById('cabinet');
    			while(valeurs.length != 1) {
    				document.getElementById('cabinet').options[valeurs.length-1] = null;
    			}
     
    			keys = xhr.responseXML.getElementsByTagName("key");
    			valeurs = xhr.responseXML.getElementsByTagName("value");	
     
    			if (valeurs.length != 0) {
    				//on fait juste une boucle sur chaque élément "value" trouvé
    				for (i = 0; i < valeurs.length; i++) {
    					// On ajoute un élément a la liste
    					document.getElementById('cabinet').options[i+1] = new Option(valeurs.item(i).firstChild.data, keys.item(i).firstChild.data, false, false);
    				}
    			} else {
    				//TODO
    			}
    			//updateFormatList(); // cette méthode me servira a actualiser une autre liste lorsque celle-ci fonctionnera
    		} else {
    			//TODO
    		}
    	}
     
    	// On envoie ses données
    	xhr.send("type="+type);
    }
    Etant débutant en Ajax je me dit que y'a surement un truc que j'ai loupé...
    La méthode updateministere est appélé sur un onchange, et sur ie6 il ne me fait même pas la première alerte. En fait même avant l'appel grace au onchange j'ai une erreur javascript (un ; qui manque quelques part, mais je ne le vois point xD). Avec firebug sous firefox je n'ai pourtant aucune erreur même lors du post en ajax.
    Si j'enleve le onreadystatechange et le send ie6 ne me met plus d'erreur et parcours bien ma methode updatelisteministere (en entier), mai bon cela ne me donne pas grand chose. :/

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    OK je ne sais pas pourquoi mais avec ie6 il faut passer par une procédure intermédiaire et non pas la déclarer dans la fonction d'appel en elle-même.
    Ceci oblige donc a créé une "constante" pour le js déterminé.

    voila en gros ce que j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    var xhr;
     
    function updateMinistereList() {
    	xhr = init(); // Récupère le XMLHttpRequest
     
    	var keys;
    	var valeurs;
     
    	document.getElementById("loader").className="voir";
     
    	xhr.open("POST", "ajax/updateListeMinistere.php", true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	sel = document.getElementById('type');
    	type = sel.options[sel.selectedIndex].value;
     
    	xhr.onreadystatechange = handleMinistereReturn;
     
    	// On envoie ses données
    	xhr.send("type="+type);
    }
     
    function handleMinistereReturn() {
    		if(xhr.readyState == 4 && xhr.status == 200) {
    			document.getElementById("loader").className="cacher";
    			valeurs = document.getElementById('cabinet');
    			while(valeurs.length != 1) {
    				document.getElementById('cabinet').options[valeurs.length-1] = null;
    			}
     
    			keys = xhr.responseXML.getElementsByTagName("key");
    			valeurs = xhr.responseXML.getElementsByTagName("value");	
     
    			if (valeurs.length != 0) {
    				//on fait juste une boucle sur chaque élément "value" trouvé
    				for (var i = 0; i < valeurs.length; i++) {
    					// On ajoute un élément a la liste
    					document.getElementById('cabinet').options[i+1] = new Option(valeurs.item(i).firstChild.data, keys.item(i).firstChild.data, false, false);
    				}
    			} else {
    				//TODO
    			}
    			//updateFormatList(); // cette méthode me servira a actualiser une autre liste lorsque celle-ci fonctionnera
    		} else {
    			//TODO
    		}
    }
    merci moi

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Donaldinou Voir le message
    OK je ne sais pas pourquoi mais avec ie6 il faut passer par une procédure intermédiaire et non pas la déclarer dans la fonction d'appel en elle-même.
    Non, ça ne change rien. Je suppose que tu as fait autre chose en même temps qui a résolu ton problème.....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Envois de valeur en POST
    Par lermit dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/12/2007, 21h27
  2. [AJAX] Post de Ajax
    Par lesafir dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2007, 17h40
  3. Réponses: 1
    Dernier message: 22/01/2007, 20h33
  4. [AJAX] Methode post remplace + par espace
    Par dgedge dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/07/2006, 09h09
  5. encodage des données lors du post en AJAX
    Par jibouze dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 19/04/2006, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo