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] Exécution Javascript dans XSL (FireFox)


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [AJAX] Exécution Javascript dans XSL (FireFox)
    Bonjour,

    J'utilise AJAX pour effectuer des transformations de documents XSL et XML pour affecter le résultat dans une DIV. Je peux faire cela en mode synchrone ou asynchrone avec des fonctions que j'ai développé (en m'inspirant de plusieurs sites).

    Dans le fichier XSL, j'ai parfois du Javascript qui doit s'exécuter. Jusque là je n'ai pas eu de problème, tout fonctionnait. Mais depuis la version 2.0.0.2 de Firefox, j'ai des soucis de priorité d'exécution de script. Je m'explique avec un exemple simple :

    J'ai une page qui charge un contenu de div en AJAX de manière synchrone. Pour cela j'utilise un fichier XML presque vide, et un fichier XSL presque vide aussi, mais dans lequel j'ai du javascript : alert(1);

    A la suite de cette transformation j'exécute une autre instruction javascript : alert(2);

    Sous Internet Explorer, le résultat est donc une boite de dialogue "1" puis "2", donc correct.
    Sous Firefox j'avais le même résultat avant, mais depuis la dernière version 2.0.0.2 j'obtiens une boite de dialogue "2" puis "1". Je n'arrive pas à trouver d'où cela peut provenir.


    Voici le code pour ceux qui pourraient m'aider. Mes 3 fichiers :

    Fichier default.asp qui contient les fonctions JS
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <html>
    <head>
     
    	<script type="text/javascript">
     
    		var xhr_object = Create_XHR(); // Objet XMLHttpRequest unique
     
    		// Fonction de création de l'objet XHR
    		function Create_XHR()
    		{
    			var http = null;
    			if(window.XMLHttpRequest) // Firefox
    			{
    				http = new XMLHttpRequest();
    			}
    			else
    				if(window.ActiveXObject) // Internet Explorer
    				{
    					var versions = ["Microsoft.XMLHTTP","Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
    		            for (var i = 0; i < versions.length ; i++) {
    		            try
    		            {
    					    http = new ActiveXObject(versions[i]);
    			            if (http)
    			                break;
    		            }
    		            catch (objException){
    		            	};
    		            }	
    		      	}
    		     return(http);
    		}
     
    		// Fonction d'appel à l'objet XHR, qui renvoie un objet XML
    		function XHR(s_method, s_url, s_param)
    		{
    			var resp = ""; // Variable contenant la réponse XML aux requêtes
    			if (xhr_object != null)
    			{ 		
    				if (s_method.toUpperCase() == "POST")
    				{
    					xhr_object.open("POST", s_url, false);
    					xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    					xhr_object.send(s_param);
    						if (xhr_object.readyState == 4)
    							resp = xhr_object.responseXML;
    				}
    				else
    				{
    					if (s_param != "")
    				    	s_url = s_url + "?" + s_param;
     
    				    xhr_object.open("GET", s_url, false);
    				    xhr_object.send(null);
    						if (xhr_object.readyState == 4)
    							resp = xhr_object.responseXML;
    				}
    			}
    			else
    				alert("Erreur");
    			return(resp);
    		}
     
    		// Fonction de transformation XML/XSL synchrone
    		function transformAJAX(s_cible,s_xml, s_xsl, s_method, s_param)
    		{		
    			try
    			{
    				// Partie Firefox
    				if (window.XSLTProcessor)
    				{
    					var xslStylesheet, xmlDoc;
    					var xsltProcessor = new XSLTProcessor();
    					xslStylesheet = XHR("GET", s_xsl, "");
    					xsltProcessor.importStylesheet(xslStylesheet);
    					xmlDoc = XHR(s_method, s_xml, s_param);
    					var fragment = xsltProcessor.transformToFragment(xmlDoc, document);
     
    					if ((cible!="")&&(document.getElementById(s_cible)))
    					{
    						var cible = document.getElementById(s_cible);
    						cible.innerHTML="";
    						cible.appendChild(fragment);
    					}
    					else
    					{
    						var tmpElement = document.createElement('div');
    						tmpElement.appendChild(fragment);
    						document.write(tmpElement.innerHTML);
    					}
    				}
    				// Partie Internet Explorer
    				else if (window.ActiveXObject)
    				{
    					var docXML = XHR(s_method, s_xml, s_param);
    					var docXSL = XHR("GET", s_xsl, "");	
    					if (s_cible!="")
    					{
    						var cible = document.getElementById(s_cible);
    						cible.innerHTML = docXML.transformNode(docXSL.documentElement);
    					}
    					else
    						document.write(docXML.transformNode(docXSL.documentElement));
    				}
    			}
    			catch (e)
    			{
    				alert(e.description);		
    				return e;
    			}
    		}
    	</script>
     
    </head>
     
    <body>
     
    	<div id="divsearch"></div>
     
    	<script type="text/javascript">
    		transformAJAX("divsearch","test.xml", "test.xsl","get","");
    		alert(2);
    	</script>
     
    </body>
    </html>
    Fichier XML simple test.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ROOT>
    	<TEXT Titre="Page de test"/>
    </ROOT>
    Fichier XSL test.xsl
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="/">
     
    	<div>
    		<xsl:value-of select="/ROOT/TEXT/@Titre"/>
    	</div>
     
    	<script type="text/javascript" defer="true">
    		alert(1);
    	</script>
     
    </xsl:template>
    </xsl:stylesheet>
    Si quelqu'un a déjà rencontré ce problème ou a une idée, merci par avance

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Personne n'a ne serait-ce qu'une idée du problème?

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2017, 10h20
  2. [MySQL] Problème exécution javascript dans echo php
    Par lemzo84 dans le forum PHP & Base de données
    Réponses: 38
    Dernier message: 04/08/2011, 17h13
  3. [XSLT] javascript dans xsl/xml
    Par loutemilou dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 04/07/2011, 13h44
  4. Réponses: 3
    Dernier message: 02/07/2010, 23h58
  5. [AJAX] Le javascript dans ma réponse n'est pas interprété !
    Par stitch dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/05/2007, 13h13

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