Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mozilla, Oui. Les autres ... Noin.

AJAX

    8 avril 2010 à 15:42:02

    Bonjour,
    Je n'arrive pas à comprendre pourquoi mon script s'exécute très bien sur Mozilla, tandis que sur IE, Opera, Google Chrome,... Le script affiche "false" mais l'envoie d'un message ce fait bien.

    Voici le code :

    var pseudo = false;
    var message = false;
    var xhr = false;
    actualiser(pseudo, message);
    window.onload = init;
    
    function init()
    {
    	document.getElementById("chatbox").onsubmit = function() { return envoyer();}
    }
    
    function envoyer()
    {
    	var pseudo = encodeURIComponent(document.getElementById("pseudo").value);
    	var message = encodeURIComponent(document.getElementById("message").value);
    	
    	actualiser(pseudo, message);
    	return false;
    }
    	
    function actualiser(pseudo, message)
    {
    	
    	if (pseudo && message)
    	{
    		var url = "script/chatmess.php?pseudo=" + pseudo + "&message=" + message;
    	}
    	else 
    	{
    		var url = "script/chatmess.php";
    	}
    	
    	if (window.XMLHttpRequest)
    	{
    		xhr = new XMLHttpRequest();
    	}
    	else if (window.ActiveXObject) 
    	{
    		try
    		{
    			xhr = new ActivexObject("Microsoft.XMLHTTP");
    		}
    		catch (e) {}
    	}
    	
    	if (xhr)
    	{
    		xhr.onreadystatechange = afficher;
    		xhr.open("GET", url, true);
    		xhr.send(null);
    	}
    	else
    	{
    		document.getElementById("message").value = "Désolé mais votre naviguateur ne suporte pas ce script";
    	}
    }
    
    function afficher()
    {
    	statut = xhr.status;
    	if(statut == 200 || statut == 0)
    	{
    		if (xhr.readyState == 4)
    		{
    			var reponse = (xhr.responseXML && xhr.responseXML.contentType=="text/xml") ? xhr.responseXML.getElementsByTagName("chatbox")[0].textContent : false;
    			document.getElementById("zoneChat").innerHTML = reponse;
    		}
    	}
    	else
    	{
    		alert(statut);
    	}
    	setTimeout(actualiser, 3000, pseudo, message);
    }
    


    En gros c'est comme si pour certains navigateurs, la réponse n'est pas au format XML.

    Merci d'avance,
    P.S : Je sais que la fonction setTimeout ne marche pas sur IE.
    • Partager sur Facebook
    • Partager sur Twitter
      8 avril 2010 à 15:57:13

      P.S : Je sais que la fonction setTimeout ne marche pas sur IE.
      Euh... Non.
      C'est juste que tu l'utilises extrêmement mal là
      setTimeout(function(){actualiser(pseudo, message)}, 3000);
      Comme ça, ça irait déjà mieux.
      • Partager sur Facebook
      • Partager sur Twitter
        8 avril 2010 à 16:05:22

        Merci pour la correction, ca me sera fort utile pour la suite.
        Mais la problème reste le même x(
        • Partager sur Facebook
        • Partager sur Twitter
          8 avril 2010 à 16:26:47

          Si tu remplaces.. (xhr.responseXML && xhr.responseXML.contentType=="text/xml") par (xhr.responseXML) seulement, ça marche ?
          • Partager sur Facebook
          • Partager sur Twitter
            8 avril 2010 à 16:47:35

            Ah oui parfait ca marche, merci :D

            Donc y'a que Mozilla qui reconnait la propriété contentType ?
            • Partager sur Facebook
            • Partager sur Twitter
              8 avril 2010 à 16:49:48

              Citation : birdy42

              C'est juste que tu l'utilises extrêmement mal là



              Non, il l'utilise bien... Enfin je veux dire... le standard autorise tout à fait cette écriture, qui permet d'éviter l'utilisation d'une fonction anonyme (qui alourdit considérablement la syntaxe).

              Mais IE et les standards...... :-°
              • Partager sur Facebook
              • Partager sur Twitter
                8 avril 2010 à 16:57:45

                D'une écriture ou d'une autre ca ne marche quand même que sur Mozilla (je viens de tester) x)
                Et mon script bug toujours sur IE qui m'affiche un bon "undefined" ...
                Décidément IE me mettras toujours des bâtons dans les roues x)
                • Partager sur Facebook
                • Partager sur Twitter
                  8 avril 2010 à 17:02:54

                  Citation : Rossato

                  Ah oui parfait ca marche, merci :D



                  Quoi, ça marche plus ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 avril 2010 à 17:06:26

                    Si mais j'avais oublier de tester sur IE (8).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 avril 2010 à 17:15:03

                      C'est pas IE qui a du mal avec responseXML ?

                      Si tu mets responseText, ça t'affiche bien le XML sous forme de texte ?

                      (Fais un alert() pour tester)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 avril 2010 à 17:19:05

                        Si, ca marche mais bonjour la catastrophe quand je voudrais structurer la réponse x(
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 avril 2010 à 17:24:14

                          Oui, je sais...

                          Tu pourrais essayer de faire ça dans le cas où xhr.responseXML est undefined :

                          var doc = new ActiveXObject("MSXML2.DOMDocument");
                          doc.loadXML(xml.responseText);
                          


                          Et après... tu te débrouilles :-°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 avril 2010 à 2:48:21

                            Désolé de ne plus avoir donné de nouvelle mais j'étais assez occupé.
                            Je vais essayer cette méthode tout de suite, Golmote, merci.

                            Edit : J'ai trouvé ce qui empêchait mon script de fonctionner sur IE, ce bon vieux IE ne reconnait pas textContent, il gère un autre attribut ("text").

                            P.S : Pas hasard, vous sauriez me dire si il est possible de gérer l'affichage avec une feuille de style XSL ?

                            P.P.S : Mon script me renvois une petite erreur sans trop d'importance (mais je suis maniaque)à propos de xhr.status. On dirait qu'il n'aime pas se faire appeler en boucle T_T Mais si j'enlève (il est pas fort utile) j'ai carrément le navigateur qui plante. M'enfin le script fonctionne même avec cette erreur.
                            Voici ce que dis la console FF :
                            Erreur : uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: URL DU SITE :: afficher :: line 67" data: no].
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Mozilla, Oui. Les autres ... Noin.

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown