11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

je suis conscient que je risque d'abordé un sujet plusieurs fois traité, mais je suis vraiment bloqué, après de multiple tests et recherches.

En effet, depuis une page classique je charge un contenu du site via un appel AJAX.
Dans ce contenu j'ai une carte Google Maps accompagné de ses fonctions javascript que je ne peux dissocier de la carte car les fonctions sont générés en fonctions des données à afficher sur la carte.
Le problème, c'est que la réponse retournée par AJAX retirer les balises script du contenu, et de ce fait la carte Google Maps ne peut fonctionner.
Je voudrais savoir si il n'y a vraiment pas une solution pour contourné ce problème des balises script non traité par l'AJAX ?

Je ne sais pas si je suis bien clair, en espérant que quelqu'un ai la réponse.
Merci d'avance,
Hello.

Tu utilises un framework JS pour tes appels Ajax?

Jquery lors des appels Ajax retournant du HTML contenant des balises <script> évalue celles-ci immédiatement et les retire ensuite du HTML.

Poste un peu de code ou une page en ligne, là c'est difficile de t'aider avec si peu d'infos.
Bonjour,

J'utilise juste le framework de JQuery.

Je sais bien que les balises <script> sont retirées, après d'autres tests hier, j'ai réussi à ce que mes balises remontent dans le code en faisant un eval, mais le code n'était pas reconnu en tant que tel une fois affiché, car les fonctions qui était dans les balises <script> n'était pas reconnues.

En ce qui concerne le code, c'est juste un simple appel ajax du genre $(#idcss).load('url') où dans la page appelée il y a du code js avec les balises <script> et ce sont les balises <script> de la page appelé qui sont "ignorées"
C'est extrêmement peu clair ce que tu racontes là.

Si tu charge un morceau de HTML avec dedans un
<script>alert('test')</script>
, tu as bien l'alert qui s'affiche?

Je pense que le problème ne viens pas de ton appel ajax, mais des scripts que tu charges.
Voilà les fonctions qui me permettent l'appel ajax


function getXMLHTTP(){
	var xhr=null;
	if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest();
	else if(window.ActiveXObject){ // Internet Explorer
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e1) {
				xhr = null;
			}
		}
	}
	else { // XMLHttpRequest non supporté par le navigateur
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	}
	return xhr;
}
function callSritDetail(url,cible) {
	var _xmlHttp = getXMLHTTP();
	_xmlHttp.open("GET",url);
	_xmlHttp.onreadystatechange=function() {
		if(_xmlHttp.readyState==4&&_xmlHttp.responseText) {
			document.getElementById(cible).innerHTML=_xmlHttp.responseText;
			evalueScripts(cible);
		}
	};
	// envoi de la requête
	_xmlHttp.send(null)
}
function evalueScripts(targetId) {
	var mesScripts = document.getElementById(targetId).getElementsByTagName("script");
	for (var i=0; i<mesScripts.length; i++) {
		eval(mesScripts[i].innerHTML);
	}
}


Voilà le code de mon appel ajax :


<script type="text/javascript">
callSritDetail('urldemapageappellée','idcssdetination');
</script>


Dans ma page appelée, si j'ajoute un alert, il ne s'affiche pas.
Il n'y a dans cette page que des fonctions js liés à une carte Google Maps, et le code pour la carte Google Maps.
Alors est ce que ce n'est pas lié non plus au fait que le domaine soit différent ?
Car le contenu html en lui même fonctionne bien.

Désolé si je suis pas clair, j'essaye d'expliqué au mieux.[/i]
J'ai utilisé (en test) ces fonctions car en utilisant directement JQuery le "eval" des <script> ne fonctionnait pas.
Je n'utilise pas JQuery que pour ça dans le site.
J'ajoute aussi, que je débute dans l'AJAX et le JQuery donc je ne connait pas toutes les "subtilités" !
J'ai refait le test (dans le doute) et avec un load de jQuery normalement tu devrais bien avoir le alert qui se déclenche.

Tu as la possibilité de nous montrer une page en ligne présentant le problème?
Non malheureusement, je n'ai pas de page en ligne, c'est sur mon environnement de développement en entreprise, car c'est un nouveau site.

pour le alert, je n'en doute pas, mais le soucis, c'est que ce sont les fonctions qui sont utilisés par l'internaute qui ne sont pas reconnues une fois le load de la page effectué
Difficile de t'aider comme ça à l'aveugle.

Je peux juste te conseiller : de retester ton load sur un fichier HTML vierge avec juste un script contenant un console.log ou un alert.

Une fois que c'est bon, retester en ne chargeant que le premier script, puis les deux premiers et ainsi de suite jusqu’à trouver celui qui bloque.