<script> javascript dans page AJAX

Fermé
Tulule - 7 janv. 2009 à 11:50
 sviatoslav - 23 nov. 2013 à 18:09
Bonjour,

SVP, aucune redirection... j'ai cherché partout et tout ce que j'ai trouvé ne m'a absolument pas aidé !

J'ai une page PHP appelée avec AJAX
quand je note sur cette page : <?php echo ("test"); ?> -> Cela fonctionne bien !

Mais quand je note :
<script type="text/javascript">
document.write("test");
</script>

Cela ne s'exécute pas !

J'ai lu plein de truc sur internet :
Il y en a qui propose d'utiliser eval();
D'autre qui parle de windows.eval();

Rien ne fonctionne !

SVP, EST-CE QUE QUELQU'UN PEUT ME DIRE COMMENT EXECUTER UN SCRIPT JAVASCRIPT SUR UNE PAGE PHP APPELEE AVEC AJAX ???

Parceque ça fait des jours que je galère et ça m'énerve graaavvee !!!

Merci d'avance pour vos réponses !
A voir également:

18 réponses

Je suis dans le meme cas avec un upload d'image via une iframe :

En mettant :
echo<script type=\"text/javascript\">function...</script>;

Ca ne marche pas, le script ne s'execute pas

Cependant si on met simplement
echo<script>function...</script>;

Le script s'execute, ca marche...


Allez savoir pourquoi... je me penche d'ailleur sur cette question, et si je trouve la reponse je vous le ferai savoir
14
Voilà le code que j'utilise pour pouvoir mettre des script js a éxécuter en meme temps que du php appellé via httprequest:

[...] //Le début c'est les vérifications standards du navigateur et l'envoi de la requete Ajax puis ...

XhrObj.onreadystatechange = function() {
if (XhrObj.readyState == 4 && XhrObj.status == 200) {
content.innerHTML = XhrObj.responseText ; // content c'est le div ou on veut afficher le résultat
var AllScripts=content.getElementsByTagName("script")
for (var i=0; i<AllScripts.length; i++) {
var s=AllScripts[i];
if (s.src && s.src!="") {
// Précédement asynchrone, mis en synchrone pour éviter des problèmes de dépendances de scripts
alert(s.src);
eval(getFileContent(s.src));

}
else {

eval(s.innerHTML);
}
}

J'espere que ca pourra t'aider !
0
J'ai mis +1 pour le commentaire d'au dessus, pas pour le message original.
Merci Jives69, ce que tu as mis marche à la perfection pour moi.
0
Mazamazine Messages postés 81 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 10 février 2015 13
16 févr. 2012 à 04:42
@Jives69
3 ans + tard : merci beaucoup, génial ! Ça m'enlève une belle épine du pied :)
Je l'ai simplifié n'ayant pas de src dans ma page appelée :

if (xmlhttp.readyState==4 && xmlhttp.status==200) {
	document.getElementById("ma_div").innerHTML=xmlhttp.responseText;
	var scripts=document.getElementById("ma_div").getElementsByTagName("script");
	for (var i=0; i<scripts.length; i++) {
		eval(scripts[i].innerHTML); 
	} 
}
0
Mazamazine Messages postés 81 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 10 février 2015 13
16 févr. 2012 à 04:43
J'ajoute que la réponse donnée dans le message original ne fonctionne pas ici...
0
Moi j'ai trouver un truc simpa , mais qui ne s'applique pas à tout les cas.


Selon ce que renvoi la requete SQL , on met des div avec des valeurs dedans

exemple <div id="reponse1">1990 </div>


On appele une fonction javascript chargé avec la page (et non pas l'appel ajax)

et dans cette fonction javascript on récupère avec le DOM la valeur de la div

document.getElement...


Le seul soucis c'est votre facon d'appeler le javascript (onclick,onmouseover)

Ou sinon pour tout le temps l'appeler , placer un onfocus sur le body (bouhhh pas propre mais en meme temps faire du javascript après de l'Ajax c'est pas propre !)

Et vous mettre une div en style="none" avec comme valeur 0 , et lorsque qu'on récupère 0 dans le javascript on n'execute pas la foction.


Qu'en pensez vous ?
6
Je vous donne une solution pour executer javascript ajax
3
Bonjour (ou bonsoir^^)

si j'ai bien compris, tu veux éxecuter une fonction javascript depuis la page de callback en PHP (retournée par ajax)?
C'est vrai que ce n'est pas possible ta page de callback est déja éxecutée avant qu'ajax ne la retourne.

Je suis dans le même problème que dois car je veux executer une fonction JS selon la réponse ajax, j'ai un peu cherché sur le net et j'ai trouvé un début de solution que je trouve pas mal du tout :

typiquement tu récuperes ta requette de cette manière :

document.getElementById(id_div).innerHTML = xhr.responseText;

or si t'écris du javascript, et que t'affiches responseText, t'auras la fonction js écrite, ou qui ne s'execute pas.

Mais rien ne t'empeches d'utiliser la fonction eval(); directement apres la récupération de ta requette car t'es toujours dans l 'exécution du script.

Exemple :

ton script PHP:

<?php
header('Content-Type: text/html; charset=ISO-8859-15');
$test = "texte";
echo 'alert("'.$test.'");';
?>

ton script JS (lors de la récupération de la requette) :
...
eval(xhr.responseText);
...

Avec bien sur la variable xhr définie etc..

En gros la fonction eval(); t'éxecutes la chaine de son argument en JS.
Cette méthode fonctionne mais je suis ouvert à toute autre idée ;)
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
x.tezza (xdreamweb.com)
13 oct. 2010 à 14:58
yep,
je sais que j'arrive un peu tard mais, après mainte galères j'ai trouvé la solution à une partie du problème.
j'avais besoin de faire exécuter un script js sur une page appelée en ajax (album photo sur un liste de résultats de recherche au click sur la photo de l'annonce monté avec galleria)
j'ai donc utilisé la technique suivante :
dans mon header de page j'appelle mon jquery ainsi que mon script galleria.js
au click sur une photo, je déclenche une fonction ajax en passant en paramètre l'id de l'annonce.
j'exécute ma raquette ajax et fais afficher mon div avec la galerie photo.
dans ma fonction ajax, juste après la fonction d'affichage de mon div, je colle mon code js qui doit s'exécuter sur la page générée par ajax...
petit exemple ci dessous

function albumPhoto(id){
	creerRequete();
	var url = 'album.php?id_annonce='+id;
	requete.open('GET', url, true);
	requete.onreadystatechange = function() {
		if(requete.readyState == 4) {
        	if(requete.status == 200) {
        		// le div ou doit s'affiche ma réponse
        		var leDiv2 = document.getElementById('galleriaSupport');
        		// ma page générée en ajax
				var reponse = requete.responseText;
				// affichage de la réponse dans mon div
				leDiv2.innerHTML = reponse;
				// mon code js à exécuter sur ma page générée
    			       Galleria.loadTheme('xprod/js/src/themes/classic/galleria.classic.js');
    
    			       // run galleria and add some options
    			      $('#galleria').galleria({
        		      image_crop: true, // crop all images to fit
        		      thumb_crop: true, // crop all thumbnails to fit
        		      transition: 'fade', // crossfade photos
        		      transition_speed: 500, // slow down the crossfade
        		      data_config: function(img) {
            		          // will extract and return image captions from the source:
            		          return  {
                		        title: $(img).parent().next('strong').html(),
                		       description: $(img).parent().next('strong').next().html()
            			        };
        			   },
     			       
     	                      });
                        }
                   }
		};
        requete.send(null);
	} 
1
aider moi svp de connaitre une fonction ajax qui permet de déplace une image dans tout les positions
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 janv. 2009 à 18:41
Bonsoir,

pourquoi vouloir absolument avoir un script JS dans la réponse php à la requette Ajax

le plus simple c'est de mettra dans la fonction Ajax dans sa partie traitement de la réponse une action javscript

par ex si le script php repond A --> on fait une action jS 1

si le script repond B --> on fait une action JS 2

etc..
0
Salut!

Je pense que d'éxecuter un script JS en fonction de la réponse PHP n'est peut être pas le meilleur moyen :

il faudrait en effet prévoir dans le script qui gere les requettes ajax, toutes les fonctions JS en fonction de la réponse PHP, alors qu'avec eval();, il suffit d'utiliser cette fonction une seule fois dans la partie AJAX et de ne plus s'en soucier !

Apres libre à nous d'écrire de retourner du JS , je trouve que c'est 2 fois moins de travail !
0
IpIpIpIpOne Messages postés 436 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 24 mai 2009 116
19 févr. 2009 à 01:05
Tout est possible ...

Voici un code pour séparer le javascript du texte et l'exécuter. Le javascript doit être placé entre des balises '<script></script>' (ou autres ...)

----
var texte="C'est <script>alert('js 1');</script>super <script>alert('js 2');</script>AJAX !";
//var texte=xhr.responseText;
var scripts="";
while(texte.indexOf('<script>')!==-1){
var provisoire=texte.substr(texte.indexOf('<script>')+8);
scripts+=provisoire.substr(0,provisoire.indexOf('</script>'));
texte=texte.substr(0,texte.indexOf('<script>'))+texte.substr(texte.indexOf('</script>')+9);
}
eval(scripts);
alert(texte);
----

Résultat -> 3 alert : "js 1", "js 2", "C'est super AJAX !"

----

Cordialement,

IpIpIpIpOne
0
moi j ai pense avoir le meme probleme et j ai pas mal chercher sans succse
j explique :

j ai une page qui avec ajax.udapter adapte un div en fonction d un formulaire

elle appel donc une page php

=> j ai donc ma liste qui s affiche en fonction des variable envoyé en post

mais sur cette meme page j ai une pagination : donc ma question est la suivante :

comment faire fonctionner cette pagination alors que le contenu de la page php est deja charger dans la nouvelle page en ajax biensur??

merci a bientot jespere,, : )
0
Salut, j'espere ne pas venir trop tard,
alors moi ce que je fais et je pense que c'est ce qu'il ya a faire, il faut appeller ta fonction dans un echo


exemple:

<? echo '
<script language="javascript" type="text/javascript">
alert("ça marche super");
</script>' ; ?>
<? } ?>


tu mets ça dans la page appelé par ajax et c'est ok

moi ce que je fais aussi, je mets mon script dans ma page principale et je l'appelle dans la page chargé par ajax

par exemple si dans ma page principale j'ai un script du genre:

<script language="javascript" type="text/javascript">
function ecrire(){
alert("ça marche super");
}
</script>


dans ta page appelée par ajax tu fais :

<? echo '
<script language="javascript" type="text/javascript">
ecrire();
</script>' ; ?>
<? } ?>


donne moi des nouvelles
0
Le problème c'est que si ajax retourne 2 fois de suite ecrire(); (si on l'appelle par exemple toutes les 5s) il est pas executé 2 fois.
0
anatolekadel Messages postés 102 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 novembre 2011 3
26 oct. 2011 à 19:15
Bonjour, comme beaucoup je suis confronté au même problème que vous.
J'aimerai exécuter un script JavaScript généré par une page PHP appelée par AJAX.

Donc, j'ai pris le même script que Jives69. Mais ça ne marche pas, je poste donc ici mon code pour voir si vous pourrez trouver d'où vient l'erreur.

Mon code JavaScript qui affiche le résultat de l'appel AJAX:
//url, c'est url de la page PHP et cadre, c'est la div où j'aimerai que soit placé le résultat
function requestGET(url,cadre) { 
	var XHR = getXMLHttpRequest();
	XHR.open("GET",url, true); 
	XHR.onreadystatechange = function() {
		if (XHR.readyState == 4 && XHR.status == 200) {
			document.getElementById(cadre).innerHTML = XHR.responseText ; // content c'est le div ou on veut afficher le résultat
			var AllScripts=document.getElementsByTagName("script") 
			for (var i=0; i<AllScripts.length; i++) {
				var s=AllScripts[i]; 
				if (s.src && s.src!="") { 
					// Précédement asynchrone, mis en synchrone pour éviter des problèmes de dépendances de scripts 
					eval(getFileContent(s.src)); 
				} 
				else { 
					eval(s.innerHTML); 
				} 
			}
		}
		else {
			cadre.innerHTML = '<img src="content/loading.gif" />';
		}
	}

	XHR.send(null);	
	return; 
}


L'affichage s'effectue bien, c'est juste l'exécution du JS.

Et mon code JS qui est transmis par AJAX.
<?php
echo '
<script>
function valueSlider() {
	var resultat = document.forms["option"].elements["slider"].value;
	document.forms["option"].elements["rangeValue"].value = "";
	document.forms["option"].elements["rangeValue"].value += resultat+" %";
}
</script>';
?>


Alors ? Où ais-je commis une faute ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
1 mars 2012 à 21:35
dans ton cas en ajax c'est possible:

- un événement (click de souris, etc..) dans ta page principale déclenche dans le navigateur l'envoi d'une requette AJAX
- cette requette Ajax appelle un script PHP sur le serveur en lui passant une ou plusieurs valeurs (très intéressant pour avoir une réponse de php adaptée à chaque cas)

- le script php répond par l'envoi de données html par ex (echo 'bonjour')

- lorsque Ajax dans le navigateur reçoit la réponse, il l'affiche dans le DIV

- attention dans ta page principale, ce div doit avoir un id (unique dans la page) ex :
<div id="reponse_serveur"></div>

dans la partie ajax qui va "ecrire" tu auras:

document.getElementById('reponse_serveur')=la reponse du serveur

Nota: dans cette partie on peut rajouter des instructions javascript, alors pourquoi les intégrer dans la réponse du serveur
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 avril 2012 à 16:51
mariamkotti si tu veux une réponse crée un nouveau topic, ne te greffes pas sur un déja existant
0
La je sens que je vais peter les plombs ... oh oui !

Je veux éxécuter une requete AJAX dans une page PHP déjà appelée avec AJAX.

C'est super important ! Vraiment !

Il n'y a personne pour répondre... ça doit pas être si compliqué tout de même.

COMMENT ON EXECUTE UN <SCRIPT> ???

Je sais que c'est faisable, car il y a des gens qui y arrive ! mais je sais pas comment.

Svp, c'est vraiment important je vous jure !
Comment je dois faire ?
Y'a vraiment personne qui sait ?

Enfin, merci quand même.
-1
pour info :

http://ajaxpatterns.org/On-Demand_Javascript
-1
internetasso Messages postés 1054 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 30 juin 2013 177
Modifié par crapoulou le 27/09/2010 à 20:46
plusieurs choses à lire :
https://www.xul.fr/xml-ajax.html
pour t'aider...

ensuite :
https://fr.wikipedia.org/wiki/Asynchronous_JavaScript_And_XML#Avantages_et_inconv.C3.A9nients



La création d'un site commence par la réflexion de son devenir...
-2
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
7 janv. 2009 à 12:22
Bonjour,


J'ai une page PHP appelée avec AJAX
quand je note sur cette page : <?php echo ("test"); ?> -> Cela fonctionne bien !

Mais quand je note :
<script type="text/javascript">
document.write("test");
</script>


Alors tu n'as pas compris le principe d'Ajax

Ajax appelle une page php sur le serveur, cette page fait un traitement (lecture BDD etc...) et te renvoie la réponse par echo

si tu mets un script javascript ça ne peut pas marcher, javascript s'exécute seulement dans le navigateur du poste client. Il n'y a aucun interêt a mettre du javascript dans une réponse à une requête Ajax.

@lain
-7
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
7 janv. 2009 à 13:21
Je veux éxécuter une requete AJAX dans une page PHP déjà appelée avec AJAX

on te dit que ce n'est pas possible

Ajax c'est du javascript, donc ne peut pas être exécuté dans un script php qui est lui sur le serveur (le serveur n'exécute pas les cripts JS)
-8
J'ai quelques soucis avec cette explication.
Je suis d'accord, on envoie au serveur PHP une demande d'exécution d'une "page" (on devrait dire un programme) PHP qui est dans son environnement et il crée une page HTML. Cette page HTML est renvoyée au navigateur qui va l'afficher. Elle peut contenir tous ce que peut contenir une page WEB, morceaux de CSS, scripts JAVA compris.

Je pense que c'est le fait de l'afficher dans une page déjà existante que cela pose un problème,

J'ai ce besoin car je veux afficher une page construite par un programme en PHP dans une DIV de la page principale d'un site.
Avec les Frames ça fonctionne car le navigateur considère que les frames constituent autant de fenêtre d'affichage d'une page complète HTML, pour une DIV, cela semble moins évident et plus restrictif, on ne peut visiblement y mettre que du texte ou des images, pas des scripts ou autres trucs interprétables ou exécutables.
Reste alors à mettre les scripts dans la page principale si ceux-ci ne sont pas construit par du PHP pour tenir compte des saisies de l'utilisateur.
0
Dans la page php chargé par le AJAX
<div onclick="javascript:ma_fction_js();"> click </div>
si jamais sa peut aider
0