Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2008, 17h05   #1
Invité régulier
 
Inscription : août 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 18
Points : 5
Points : 5
Par défaut 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 :
<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 :
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 :
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);
		}
	}
}
hickscorp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 19h32   #2
Invité régulier
 
Inscription : août 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 18
Points : 5
Points : 5
Par défaut Résolu.

Le problème vient finalement du script présenté sur ce forum:

Code :
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
hickscorp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h08.


 
 
 
 
Partenaires

Hébergement Web