Probleme pour faire interpreter du JavaScript à une page chargée via AJAX

prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009 - 3 nov. 2008 à 15:17
xanata Messages postés 2 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 5 juillet 2010 - 6 nov. 2008 à 08:18
Bonjour,

Je m'explique : Je développe actuellement un site en AJAX, il se décompose en 2 parties.
 A Gauche mon menu qui est composé de liens et lorsque je clique sur 1 de ces liens la page voulue se charge dans la partie de droite (Seule cette partie se met a jour le reste reste fixe - C'est le but d'AJAX ^^)
 Jusqu'ici aucun problème tout fonctionne parfaitement sauf qu'avec 1 de mes liens je charge une page contenant du JavaScript et étant donné que cette page est chargée via AJAX le JavaScript n'est bien entendu pas interprêté !!! Donc ma question est : Comment peut on faire interpréter du JavaScript à une page chargée par AJAX ???
 Si quelqu'un avait une solution pour me faire avancer car là je l'avoue je suis bloqué !!!

En vous remerciant par avance...

PS : J'espère avoir posté au bon endroit

35 réponses

prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
3 nov. 2008 à 18:55
merci Bultez j'y est pensé mais cela revient au meme non? si je le charge dans ma page appelante il faudra quand meme que j'appelle mon script dans la page appelée non?
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 nov. 2008 à 08:06
>>cela revient au meme non?
pas du tout.
comme ça tu es dans le standard, tu appelles une fonction "normalement".
de l'autre manière tu vas devoir ajouter :
l'extraction du js ( et c'est pas si simple ),
son exécution ( eval par exemple et c'est très gourmand déjà )....

          Bul [mon Site] [M'écrire]         
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 nov. 2008 à 11:19
et je n'ai pas répondu à >>il faudra quand meme que j'appelle mon script dans la page appelée
à priori pas nécessaire... l'appel depuis la page appelante ça doit le faire
et même, ça ne poserait pas de souci particulier.

Cordialement

Bul[mon Site][M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 nov. 2008 à 11:31
2 ch'tiot exemples ?

demo2.htm ( appel dans appelante )
<html>
   
        demo2.htm
        <script type="text/javascript">
            function appel()
            {    alert("demo2");    }
        </script>
       

        <script>
            var xml = new XMLHttpRequest();
            xml.open("get","demo2.php", false);
            xml.send("");
            appel();
        </script>   
   
</html>

demo2.php
<html>
   
        <?php echo Date('l j F Y');    ?>
   
</html>

demo3.htm ( appel dans appelée )
<html>
   
        demo3.htm
        <script type="text/javascript">
            function appel()
            {    alert("demo3");    }
        </script>
       

        <script>
            var xml = new XMLHttpRequest();
            xml.open("get","demo3.php", false);
            xml.send("");
            document.getElementById("txt").innerHTML=xml.responseText;
        </script>   
   
</html>

demo3.php
<html>
   
        onclick="appel();" value="test" />
   
</html>

j'ai "simplifié au maxi"  les appels ajax ( synchrone, aucun contrôle ... )

          Bul [mon Site] [M'écrire]          
0

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

Posez votre question
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 11:41
Re Bultez je pense que ta solution est certes bonne mais je ne vois pas comment la mettre en place.

Voici une simplification (pour une bonne lecture) de mon index.php

<!-- DEBUT DU CODE -->
<?php
    header('Content-type: text/html; charset=utf-8');
?>

<html>
    <head>
        <link rel=stylesheet type="text/css" href="./style.css" />
        <script language="JavaScript" type="text/javascript" src="#"></script> // tous mes liens vers mes javascripts nécessaire
    </head>
   
       
// image située en haut du site (fixe)
               
       
// fond du menu de gauche (fixe)
       
       
// le menu de gauche
           

               

                   
                        <li class="level3">[# Un lien]</li>
                    
               

           

       

       

           
             /*
             C'est ici que sont chargées mes pages appelées via mes liens et chaque page dispose d'un menu différent qui est donc en javascript. Il me faut donc pouvoir l'interprêter.
             */

       

   
</html>

<!-- FIN DU CODE -->

Un des menu qui devra s'afficher dans la DIV "pageencours" (ici c'est le code SANS AJAX) :

<!-- DEBUT DU CODE -->

<html>
    <head>
        <script language="javascript" type="text/javascript" src="prototype.js"></script>
        <script language="javascript" type="text/javascript" src="onglet.js"></script>
    </head>
   
       

        <script language="javascript" type="text/javascript">
            <!--
                var oOnglet = new Onglet ("calqueracine", "cssonglet");
                oOnglet.addOngletUrl ("Onglet Lister", "page_lister.php");
                oOnglet.addOngletUrl ("Onglet Ajouter", "page_ajouter.php");
                oOnglet.addOngletUrl ("Onglet Modifier", "page_modifier.php");
                oOnglet.addOngletUrl ("Onglet Supprimer", "page_supprimer.php");
                oOnglet.setFocus (1); // me permet de me placer sur le premier onglet au chargement de la page
            -->
        </script>
   
</html>

<!-- FIN DU CODE -->

Merci pour toutes les réponses que vous m'avez déjà données. Je cherche depuis presque 2 semaines (je sais ce n'est pas énorme) ; en général je ne met pas si longtemps à règlé un probleme mais la je me frotte à une réelle difficulté et n'étant pas du genre à lacher l'affaire je ne m'arreterais pas de si tot mais je ne compte pas non plus y passé 100ans (en même temps ca risque d'etre difficile ^^).
Je me suis mit à AJAX il y a trois semaines et j'ai comprit pourquoi s'en servir et comment (de facon simple) mais la ca devient compliqué!
On me fournit toujours la même solution et le GROS probleme est que je n'arrive même pas à afficher un simple "alert(le javascript s\'affiche);" après un clic sur un des liens du menu.
0
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 11:43
oups  j'écrivais en meme temps, je vais mettre tout ca a part et voir comment cela fonctionne.
Merci pour ton aide Bultez
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 nov. 2008 à 12:09
tu utilises prototype !?!
    il a tout ce qu'il faut, de base, pour gérer ce genre de choses
    ( même si je continue à penser qu'il vaudrait mieux pas ! )

en menu en javascript ?
    à notre époque html+css suffisent largement le js est inutile
    ( sauf vieilles versions de certains navigateurs ie6 pour ne pas citer par exemple,
      en général ce n'est qu'un "souci de présentation", laid, mais pas bloquant )
    rien n'empêche d'appeler la fonction nécessaire avec des paramètres
        en fonction de la page chargée...
    ...

          Bul [mon Site] [M'écrire]         
0
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 12:23
donc je pourrais créer un menu en onglet en css??? ca serais idéal et beaucoup plus simple

Pour répondre à tes questions, oui j'utilise prototype mais si je le charge dans mon index il fais buguer mon menu (du moins il le déroule entièrement, chose non voulu, mais le laisse utilisable tous les liens fonctionnent). Donc j'aurais aimé le chargé uniquement dans mes page appelées (ca risque de compliquer encore + les choses ...) donc si une autre solution m'est proposée je suis preneur.

En fait si je veux créer un deuxième menu dans ma page appelée c'est uniquement pour ne pas surcharger l'autre menu (celui de mon index) qui se verrait alors composé de 4 liens de plus pour chaque élément. Peut être qu'une autre solution serais possible mais je ne vois pas.
0
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 12:26
ba voila si je sortais un peu de mon code j'aurais pu y pensé avant, je peux tout simplement rajouté un niveau à mon menu (de l'index) et voila un gros probleme de règlé !!!

Pourquoi se casser le crâne sur quelque chose que l'on peut faire plus simplement??? Je crois que c'est un défaut que je dois travailler quand j'ai une optique je ne cherche pas à en trouver une autre et la j'viens de perdre deux semaine sur mon projet pour "rien" enfin presque
0
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 12:28
En tout cas merci pour tout Bultez, mais je me permet de t'embeter une derniere fois.
Ce n'est pas vraiment primordial mais y'a t-il une arborescence "type" ou plutot optimisée lorsque travaille avec AJAX :
0
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 12:31
j'essaierais quand meme de faire exécuter du javascript par ajax mais pas dans ce projet juste pour une culture perso (un ptit défi !!!)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 nov. 2008 à 13:07
>>faire exécuter du javascript par ajax
ah... pour culture personnelle, là c'est autre chose et intéressant

déjà : tu as le script de xtremduke
         tu as les sources des framework
         tu as un lien vers "mon" ch'tiot exemple ( gag )

ou alors met dans un div et exploite ?
            div.innerHTML=xml.responseText;
            var scrajx = d.getElementsByTagName('script');
            for( var i in scrajx )
            {    eval(scrajx[i].text);    }
si plusieurs balises <script> possible

doit bien y avoir encore 23658 pistes

          Bul [mon Site] [M'écrire]         
0
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
4 nov. 2008 à 13:55
Si ça peut t'éclairer sur le sujet (épineux) d'Ajax :

http://www.journaldunet.com/developpeur/client-web/tutoriel-pratique/08/0123-bonnes-pratiques-ajax.shtml

<hr size="2" width="100%" />Projet en cours : Joof
0
prozenproses Messages postés 16 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 21 janvier 2009
4 nov. 2008 à 14:10
Merci Bultez et XtremDuke pour ces pistes je me replonge dans mon projet mais je n'abandonne pas!
AJAX est vraiment un outil intéressant et je compte bien le maitriser...
Bonne fin de journée et bone continuation et encore merci de m'avoir donné de votre temps
0
xanata Messages postés 2 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 5 juillet 2010
6 nov. 2008 à 08:18
L'usage de javascript peut être utile lors de validation de formulaire appelés en ajax (dialogiue modal) et dont les contrôles sont effectués uniquement en ajax. Dans ce cas, il est difficile d'embarquer tout le code dans la 1ere page, car les procédure appelées sont souvent spécifiques au moments de l'appel. Mais on peut trouver un meilleur des duex monde, car il est vrai qu'un eval sur plusieur dixaine voire centaines de lignes est groumand !!, alors pour ma part j'insére le code principal dans la 1ere page (par ex: ma classe de controle formulaire, etc), puis en ajax je n'appelle que le minimum (var frm108 = new ControlForm(myform) ). Mais il reste un problèmen la variable local à ajax ( frm108 dans ce cas) n'est pas tjs visible, alors je la stocke dans une variable globale (var sysGlobal) définie dans la 1ere page (soit sysGlobal.frm108 =new CrontrolForm(myform)). ou alors lors de l'appel à eval du code ajax, on peut écrire sys_global.eval(texte) avec la meme variable.
Ces deux techniques m'ont permi de résourdre tous mes prob. de JS en ajax....
0
Rejoignez-nous