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] Code javascript envoyé dans le résultat d'un call XMLHttpRequest.


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut [AJAX] Code javascript envoyé dans le résultat d'un call XMLHttpRequest.
    Bonjour à toutes et à tous,

    Voilà je développe une petite appli web (php / mysql pour le traitement de l'info), et j'ai un schema de fonctionnement comme suit:

    mon index.php, qui include une petite lib que j'ai assemblée à partir de diverses sources du net modifiées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script language="JavaScript" type="text/javascript" src="JavaScript/AjaxFunctions.js"></script>
    Donc dans ma page principale (index), j'ai quelques liens qui chargent une page externe dans un div.
    Par exemple, je charge une page contenant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script language="javascript" type="text/javascript"><!--
    	testFunc = function () {
    		alert("Ca prouve que ça fonctionne");
    	}
    --></script>
     
    <span onclick="testFunc()">Clic test</span>
     
    <script language="javascript" type="text/javascript"><!--
    	testFunc();
    --></script>
    Mon problème est que sous safari le popup de test ne s'affiche ni à l'ouverture de la page, ni quand je clic sur le span (Si la page est chargée via AJAX). Sous firefox par contre, ça fonctionne.

    Par contre, si je fais directement pointer mon navigateur sur la page en question (Donc en la chargeant sans passer par ajax), ça fonctionne dans safari et firefox...

    Est ce que quelqu'un pourrait m'aiguiller vers une solution SVP?

    En vous remerciant de votre temps,
    Pierre.

    Note: J'ai trouvé des indices de solutions, disant de ne pas déclarer de fonctions JS via "function nom" mais "nom = function", j'ai aussi trouvé un morceau de code pour rendre plus sûr le innerHtml, rien n'y change... Voir ci dessous mon petit fichier .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
    /* --------------------------------------------------------------------------------- *
     * Generic content loading methods.
     * --------------------------------------------------------------------------------- */
     
    loadPageToId	= function (pageUrl, elementId) {
    	loadPageToElement(pageUrl, elementId, "loadingIndicator"); 
    }
     
     
    /* --------------------------------------------------------------------------------- *
     * Tabs management.
     * --------------------------------------------------------------------------------- */
     
    var tabIds			= ["tab1", "tab2", "tab3"];
    var curTab			= "";
     
    loadTabContent	= function (tabId) {
    	var curTab	= tabId;
    	for (var isz=0; isz<tabIds.length; isz++) {
    		if (tabId==tabIds[isz])
    			document.getElementById(tabIds[isz]).className	= "current";
    		else
    			document.getElementById(tabIds[isz]).className	= "";
    	}
    	pageToLoad	= document.getElementById(tabId).getAttribute("rel");
    	loadPageToElement(pageToLoad, "tabbedContent", "loadingIndicator"); 
    }
     
    loadPreviousTab	= function () {
    	var curIndex	= tabIds.indexOf(curTab)
    	if (curIndex<=0)
    		curIndex	= tabIds.length;
    	loadTabContent(tabIds[curIndex-1]);
    }
    loadNextTab	= function () {
    	var curIndex	= tabIds.indexOf(curTab)
    	if (curIndex>=tabIds.length-1)
    		curIndex	= -1;
    	loadTabContent(tabIds[curIndex+1]);
    }
     
     
    /* --------------------------------------------------------------------------------- *
     * Generic functions.
     * --------------------------------------------------------------------------------- */
     
    var loadError	= "Erreur lors du chargement de la page.";
     
    function setInnerHTML (pDivObject, pHTML) {
    	pDivObject.innerHTML	= pHTML; 
    	var All					= pDivObject.getElementsByTagName("*");
    	for (var i=0; i<All.length; i++) {
    		All[i].id			= All[i].getAttribute("id");
    		All[i].name			= All[i].getAttribute("name");
    		All[i].className	= All[i].getAttribute("class");
    	}
    	var AllScripts			= pDivObject.getElementsByTagName("script");
    	for (var i=AllScripts.length-1; i>=0; i--) {
    		var s = AllScripts[i];
    		var oScript = document.createElement("script");
    		oScript.type='text/javascript';
    		if (s.src && s.src!="") {
    			oScript.src = s.src;
    		} else {
    			oScript.innerHTML = s.innerHTML;
    		}
    		document.body.appendChild(oScript);
    		pDivObject.removeChild(s);
    	}
    }
     
    var loadPageToElement	= function (url, pageElement, loadingIndicator) {
    	document.getElementById(loadingIndicator).style.visibility	= "visible";
    	document.getElementById(pageElement).innerHTML				= "";
    	try {
    		req = new XMLHttpRequest();
    	} catch(e) {
    		try {
    			req = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try {
    				req = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (E) {
    				req = false;
    			} 
    		} 
    	}
    	req.onreadystatechange = function() {
    		xmlHttpRequestEnded(pageElement, loadingIndicator);
    	};
    	req.open("GET",url,true);
    	req.send(null);
    }
     
    var xmlHttpRequestEnded	= function (pageElement, loadingIndicator) {
    	if(req.readyState==4) {
    		if(req.status==200) {
    			document.getElementById(loadingIndicator).style.visibility	= "hidden";
    			setInnerHTML(document.getElementById(pageElement), req.responseText);
    		} else {
    			document.getElementById(loadingIndicator).style.visibility	= "visible";
    			setInnerHTML(document.getElementById(pageElement), loadError);
    		}
    	}
    }

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Résolu.
    Le problème vient finalement du script présenté sur ce forum:

    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
    function setInnerHTML (pDivObject, pHTML) {
    	pDivObject.innerHTML	= pHTML; 
    	var All					= pDivObject.getElementsByTagName("*");
    	for (var i=0; i<All.length; i++) {
    		All[i].id			= All[i].getAttribute("id");
    		All[i].name			= All[i].getAttribute("name");
    		All[i].className	= All[i].getAttribute("class");
    	}
    	var AllScripts			= pDivObject.getElementsByTagName("script");
    	for (var i=AllScripts.length-1; i>=0; i--) {
    		var s = AllScripts[i];
    		var oScript = document.createElement("script");
    		oScript.type='text/javascript';
    		if (s.src && s.src!="") {
    			oScript.src = s.src;
    		} else {
    			oScript.innerHTML = s.innerHTML;
    		}
    		document.body.appendChild(oScript);
    		pDivObject.removeChild(s);
    	}
    }
    Dans mon code, mes lignes de code JavaScript sont entourées de commentaires HTML (Backward compatibility avec IE 4-)... Ces commentaires mettent le bordel apparement, donc je vais réécrire une version de la fonction pour définir l'innerHTML.

    Merci quand même de votre temps

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

Discussions similaires

  1. Remplacer des controles ajax dans un site ASP .net par des codes javascript
    Par Contact2012 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/09/2008, 13h50
  2. [AJAX] code javascript qui ne s'excute pas
    Par backfire dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/05/2008, 15h10
  3. Appel fonction php dans code javascript
    Par licorne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/03/2008, 10h55
  4. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53
  5. code javascript dans onchange d'un <select>
    Par grochenel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/11/2005, 20h25

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