Comment pouvoir exécuter un code javascript au travers d'un createRequestObject

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 28 Décembre 2016.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Bonjour,

    j'ai un petit soucis avec un code ajax. En effet je souhaite afficher une page .php dans une balise <div>

    Cette étape fonctionne parfaitement. La page php s'éxecute mais pas le code js qui est inclus dedans. J'ai beau chercher dans tout les sens, je ne comprends pas pourquoi les images, le texte s'affichent, mais pas le petit code js.

    Voici ma page html :

    Code:
    <html>
    <head>
    
    <SCRIPT language="javascript">
    var http;
    
    function createRequestObject()
    {
        var http;
        if (window.XMLHttpRequest)
        {
            http = new XMLHttpRequest();
        }
        else if (window.ActiveXObject)
        {
            http = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return http;
    }
    
        http = createRequestObject();
        http.open('GET', 'templates/layouts/result.php', true);  // page incluse dans le div
        http.onreadystatechange = handleAJAXReturn;
        http.send(null);
    
    function handleAJAXReturn()
    {
        if (http.readyState == 4)
        {
            if (http.status == 200)
            {
    
                document.getElementById('resultat').innerHTML = http.responseText;
            }
        }
    }
    </SCRIPT>
    
    </head>
    
    <body>
    
    <div id="resultat">
    valeur avant l'appel Ajax
    </div>
    
    <body>
    
    </html>
    result.php le mot test s'affiche mais pas le code js. pourquoi?

    Code:
    <?php 
    
    echo'
    test : 
    <SCRIPT language="javascript">
       
           alert(\'texte\')
       
    </SCRIPT>';
    
    ?>
    Je remercie d'avance celui qui pourra m'aider
     
  2. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Merci pour tes liens. J'ai du coup fais quelques modifs dans mon code, j'ai rajouté ces quelques lignes :

    Code:
                var mesScripts = document.getElementById("resultat").getElementsByTagName("script");
    			
    			for (var i=0; i<mesScripts.length; i++) 
    				{
    					eval(mesScripts[0].text);
     
    				}
    Fonction complète :

    Code:
    function handleAJAXReturn()
    {
        if (http.readyState == 4)
        {
            if (http.status == 200)
            {
    
                document.getElementById('resultat').innerHTML = http.responseText;
                var mesScripts = document.getElementById("resultat").getElementsByTagName("script");
    			
    			for (var i=0; i<mesScripts.length; i++) 
    				{
    					eval(mesScripts[0].text);
     
    				}
            }
        }
    }
    
    Du coup j'ai bien le code javascript suivant qui fonctionne :

    Code:
    <SCRIPT language="javascript">
       
           alert(\'texte\')
       
    </SCRIPT>';
    Mais pas ceci :

    Code:
    <script type="text/javascript" src="monlien.js"></script>
    Je trouve pas le réponse. J'ai essayé plusieurs solution, mais rien à faire !
     
  3. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 809
    J'aime reçus:
    242
    Dans le lien de stackoverflow c'est expliqué aussi, tu dois utiliser le createElement('script') etc
     
  4. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Je viens de remplacer

    Code:
        http = createRequestObject();
        http.open('GET', 'templates/layouts/result.php', true);  // page incluse dans le div
        http.onreadystatechange = handleAJAXReturn;
        http.send(null);

    par

    Code:
    var http = XMLHttpRequest(),
        doc = document;
    http.responseType = 'blob';
        http.open('GET', 'templates/layouts/result.php', true);
    http.onload = function () {
    
        var script = doc.createElement('script'),
            src = URL.createObjectURL(http.response);
    
        script.src = src;
        doc.body.appendChild(script);
    };
    http.send();
    mais c'est pas mieux, je sais vraiment pas quoi faire
     
  5. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    ceci non plus ca ne fonctionne pas :

    Code:
    function handleAJAXReturn()
    {
        if (http.readyState == 4)
        {
            if (http.status == 200)
            {
    
                document.getElementById('resultat').innerHTML = http.responseText;
                var mesScripts = document.getElementById("resultat").getElementsByTagName("script");
    			
    
    		var mesScripts = document.createElement('script');
    mesScripts[0].appendChild(mesScripts);
    
    eval();
    
    
            }
        }
    }
     
  6. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Normal, il faut que tu donne quelque chose à évaluer à eval :
    https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_ ... obaux/eval
    Ceci dit eval c'est à fuir comme le diable, trop de risque de sécurité.

    La question est pourquoi tu as besoin d'avoir du code javascript en retour ? Tu as besoin de fonctions spécifiques à chaque appel ? Des données ne seraient pas suffisant ?
    Et si plutôt que d'attendre une fonction à ajouter dans des balises script, tu enregistrerait un fichier .js avec php et que tu le chargeait dynamiquement.
    Avec un truc du genre :
    Code:
    var js = document.createElement("script");
    js.type = "application/javascript";
    js.src = file;
    document.body.appendChild(js);
    
     
  7. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Oui en effet ta solution n'est pas mauvaise, le problème c'est que je souhaite charger un script js bien précisément dans une div du fichier result.php. Ton exemple charge dans le body tout simplement.

    Result.php

    Code:
    <?php
    <div id="div_js">
    <script src... ici ></script>
    </div>
    ?>
    J'ai essayé ce bout de code :

    Code:
    var js = document.createElement("script");
    js.type = "application/javascript";
    js.src = 'test.js';
    document.getElementById('div_js').appendChild(js);
    Mais cela ne fonctionne toujours pas. Je n'ai rien qui s'execute dans la div_js
     
  8. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Je pense que ça ne fonctionne pas parce que c'est pas sa place. Il faudrait vérifier, mais je pense que les navigateurs ne doivent pas recharger des fichiers JS n'importe où.

    EDIT : Finalement c'est faux. Tu peux attacher un script n'importe où, ça fonctionne je viens de tester.

    Code:
    <!DOCTYPE html>
    <html lang="MARSIEN">
    <head>
    	<title>Blop</title>
    	<meta charset="utf-8" />
    </head>
    <body>
    <input type="button" value="Alerte BLOP" onclick="jsFileLoad('blop.js');"> 
    <input type="button" value="Alerte BURP" onclick="jsFileLoad('burp.js');">
    <div id="tictac"></div>
    <script type="text/javascript">
    function jsFileLoad(aPath){
    	var js = document.createElement("script");
    	js.type = "application/javascript";
    	js.src = aPath;
    	document.getElementById('tictac').appendChild(js);
    }
    </script>
    </body>
    </html>
    blop.js
    Code:
    alert('blop');
    blup.js
    Code:
    alert('burp');
    Bon c'est pour le test, à ne pas reproduire en prod, c'est dégeulasse :mrgreen:
     
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Oui j'avais essayé cela, mais ca ne fonctionne à priori que avec des alert(). Si par exemple ton fichier JS contient "document.write (''un texte ici);", la div tictac n'affiche rien du tout.
     
  10. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Utilise plutôt :
    document.getElementById('tictac').innerHTML = 'un texte ici';
     
  11. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    On peut pas inclure un fichier js qui contient par exemple document.write('le texte ici');

    et l'afficher dans tictac ?

    Ca devrait etre possible non ?

    Les alert fonctionnent mais pas un simple document.write ...
     
  12. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    En faisant ca :

    Code:
    var scr = document.createElement('script');
    scr.src = 'fichier.js'; //contient document.write('le texte ici');
    scr.type = 'application/javascript';
    
    document.getElementById('tictac').innerHTML = scr;

    Ca m'affiche [object HTMLScriptElement] dans titctac
     
  13. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    C'est normal. Utilise document.getElementById('tictac').innerHTML = 'un texte ici';
    Ça fonctionne. Tu connais le bloc ou tu veux écrire au moins ?
     
  14. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Oui ca fonctionne mais je veux absolument inclure un fichier js qui contient des document.write et d'autres fonctions (il s'agit d'un formulaire en réalité)

    Est ce que cela te parrait possible ? Je ne souhaite pas inclure simplement du texte.
     
  15. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Qu'est-ce que document.write fait que innerHTML, ne fait pas :?:

    Tu inclus ce que tu veux avec innerHTML.
    Code:
    document.getElementById('tictac').innerHTML = '<h3>un titre</h3><p>du texte</p><img src="monImage.jpg" /><a href="#">un lien</a>';
    Tu peux préparer ton code html dans une variable et l'inclure :
    Code:
    var h = '<h3>un titre</h3>';
    h += '<p>du texte</p>';
    h += '<img src="monImage.jpg" />';
    h += '<a href="#">un lien</a>';
    document.getElementById('tictac').innerHTML = h;
     
  16. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    On ne s'est pas compris je pense. Je ne veux pas inclure du texte ou quoi que ce soit, je veux inclure un fichier js dans une div

    Ton exemple avec les alert était parfait, sauf que si il ne s'agit pas d'alert() ca ne fonctionne pas. Je veux faire la même chose mais avec un page js comprenant un formulaire, du jquery, des styles... et pas seulement des alert()

    Le fichier js est un formulaire fourni par un fournisseur de marque blanche

    Il me fourni un code <script src="la page du formulaire.js"></script>

    et j'aimerai donc afficher src="la page du formulaire.js" dans la div tictac par exemple.


    Si je suis ton exemple, j'aurais très bien pu faire ceci :

    document.getElementById('tictac').innerHTML = '<script src="la page du formulaire.js"></script>'; mais cela ne fonctionne pas, du moins cela m'affiche : '; } } }
     
  17. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Ahhhhhhh on va bientôt finir par savoir.
    T'as essayé une iframe ?
     
  18. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    De quelle manière ? C'est possible en javascript ?
     
  19. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Si je fais cela :

    document.getElementById('tictac').innerHTML = '<iframe src="http://google.fr" name="idFrame" id="idFrame" width="200" height="150"></iframe>'; Ca ne fonctionne pas
     
  20. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
  21. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
  22. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    139
    J'aime reçus:
    0
    Ah oui d'accord. La blague.
    J'ai crée un fichier HTML sans contenu, j'ai juste mis le code dans des balises script et le fichier balance automatiquement des document.write n'importe où. Tu m'étonne que ça marche pas.

    Reste plus que la solution eval(); au retour Ajax.

    Code:
    <!DOCTYPE html>
    <html lang="FR">
    <head>
    	<title>Bof bof</title>
    	<meta charset="utf-8" />
    
    </head>
    <body>
    <div id="monDiv"></div>
    <script type="text/javascript">
    //<![CDATA[
    document.getElementById('monDiv').innerHTML = '<script id="monScript" type="text/javascript">document.write("truc")<\/script>';
    eval(document.getElementById('monScript').innerHTML);
    //]]>
    </script>
    </body>
    </html>
     
  23. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Remplacer ce code : <script id="monScript" type="text/javascript">document.write("truc")<\/script> par un lien vers une page js ce n'est pas possible ?

    du genre :

    Code:
    <!DOCTYPE html>
    <html lang="FR">
    <head>
       <title>Bof bof</title>
       <meta charset="utf-8" />
    
    </head>
    <body>
    <div id="monDiv"></div>
    <script type="text/javascript">
    //<![CDATA[
    document.getElementById('monDiv').innerHTML = '<script id="monScript" type="text/javascript" src="lienversficherjs.js"><\/script>';
    eval(document.getElementById('monScript').innerHTML);
    //]]>
    </script>
    </body>
    </html>
     
Chargement...
Similar Threads - pouvoir exécuter code Forum Date
combien de visites par jour pour pouvoir vendre convenablement? Développement d'un site Web ou d'une appli mobile 31 Mars 2012
Comment déterminer le "pouvoir" d'un lien ? Débuter en référencement 6 Janvier 2011
Google va pouvoir distribuer de l'électricité Google : l'entreprise, les sites web, les services 20 Février 2010
Budget à prévoir pour pouvoir étudier à l'étranger Le café de WebRankInfo 26 Janvier 2009
Executer une tache cron en arrière plan Développement d'un site Web ou d'une appli mobile 15 Octobre 2018
Executer un POST au clic sur le bouton ENTRER Développement d'un site Web ou d'une appli mobile 14 Septembre 2012
[JS] executer la fonction d'une variable Développement d'un site Web ou d'une appli mobile 25 Octobre 2011
Javascript : détecter mot clés Google et exécuter un script Développement d'un site Web ou d'une appli mobile 16 Juillet 2011
Exécuter JS dans une div chargé en ajax Développement d'un site Web ou d'une appli mobile 10 Février 2011
Ajax : Executer un code php via des boutons input Développement d'un site Web ou d'une appli mobile 17 Janvier 2009
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice