Il existe un div appelé "Contenu":
<div id="content"></div>
Il doit être rempli avec les données d'un fichier PHP, par AJAX, y compris une <script>
balise. Cependant, le script à l'intérieur de cette balise n'est pas en cours d'exécution.
<div id="content"><!-- After AJAX loads the stuff that goes here -->
<script type="text/javascript">
//code
</script>
<!-- More stuff that DOES work here -->
</div>
javascript
html
ajax
JCOC611
la source
la source
window.onload
avoir créé unXMTHttpRequest
objet pour demander une autre page (php) contenant le contenu du div, y compris un script. Je fais cela avec JS ordinaire, pas de bibliothèques (autre que la mienne lol)Réponses:
Le JavaScript inséré en tant que texte DOM ne s'exécutera pas. Cependant, vous pouvez utiliser le modèle de script dynamique pour atteindre votre objectif. L'idée de base est de déplacer le script que vous souhaitez exécuter dans un fichier externe et de créer une balise de script lorsque vous obtenez votre réponse Ajax. Vous définissez ensuite l'
src
attribut de votre balise de script et voilà, il charge et exécute le script externe.Cet autre article de StackOverflow peut également vous être utile: les scripts peuvent-ils être insérés avec innerHTML? .
la source
$('#audit-view script').each(function (index, element) { eval(element.innerHTML); })
J'ai utilisé ce code, il fonctionne bien
la source
Si vous chargez un bloc de script dans votre div via Ajax comme ceci:
... il met simplement à jour le DOM de votre page, myFunction () n'est pas forcément appelé.
Vous pouvez utiliser une méthode de rappel Ajax telle que celle de jQuery méthode ajax () pour définir ce qu'il faut exécuter lorsque la requête se termine.
Ce que vous faites est différent du chargement d'une page avec JavaScript inclus dès le départ (qui est exécuté).
Un exemple d'utilisation du rappel de succès et du rappel d'erreur après avoir récupéré du contenu:
Un autre moyen rapide et sale est d'utiliser eval () pour exécuter tout code de script que vous avez inséré en tant que texte DOM si vous ne souhaitez pas utiliser jQuery ou une autre bibliothèque.
la source
Voici le script qui évaluera toutes les balises de script dans le texte.
Appelez simplement cette fonction après avoir reçu votre code HTML du serveur. Soyez averti: utilisation
eval
peut être dangereuse.Démo: http://plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p=preview
la source
Cela `` fonctionne '' pour moi en utilisant jQuery, à condition que vous n'essayiez pas d'ajouter un sous-ensemble du HTML renvoyé par XHR au document. (Voir ce rapport de bogue montrant le problème avec jQuery.)
Voici un exemple montrant que cela fonctionne:
Voici l'équivalent de ce qui précède: http://jsfiddle.net/2CTLH/
la source
Voici une fonction que vous pouvez utiliser pour analyser les réponses AJAX, en particulier si vous utilisez minifiedjs et que vous voulez qu'il exécute le Javascript retourné ou que vous voulez simplement analyser les scripts sans les ajouter au DOM, il gère également les erreurs d'exception. J'ai utilisé ce code dans la bibliothèque php4sack et il est utile en dehors de la bibliothèque.
la source
Si vous injectez quelque chose qui nécessite la balise de script, vous pouvez obtenir une erreur de syntaxe non interceptée et dire un jeton illégal . Pour éviter cela, veillez à éviter les barres obliques dans votre ou vos balises de script de fermeture. c'est à dire;
Il en va de même pour toutes les balises de fermeture, telles qu'une balise de formulaire.
la source
J'ai eu un message similaire ici, charge addEventListener sur la charge ajax SANS jquery
La façon dont je l'ai résolu a consisté à insérer des appels à des fonctions dans ma fonction stateChange. La page que j'avais configurée était 3 boutons qui chargeraient 3 pages différentes dans contentArea. Parce que je devais savoir quel bouton était enfoncé pour charger la page 1, 2 ou 3, je pourrais facilement utiliser des instructions if / else pour déterminer quelle page est chargée et ensuite quelle fonction exécuter. Ce que j'essayais de faire était d'enregistrer différents écouteurs de boutons qui ne fonctionneraient que lorsque la page spécifique était chargée à cause des ID d'élément.
alors...
si (page1 est en cours de chargement, pageload = 1) exécuter la fonction registerListeners1
puis la même chose pour la page 2 ou 3.
la source
Cela a fonctionné pour moi en appelant eval sur chaque contenu de script depuis ajax .done:
la source
Ma conclusion est que HTML n'autorise pas les balises NESTED SCRIPT. Si vous utilisez javascript pour injecter du code HTML contenant des balises de script, cela ne fonctionnera pas car le javascript entre également dans une balise de script. Vous pouvez le tester avec le code suivant et vous serez convaincu que cela ne fonctionnera pas. Le cas d'utilisation est que vous appelez un service avec AJAX ou similaire, vous obtenez du HTML et vous souhaitez l'injecter directement dans le DOM HTML. Si le code HTML injecté contient des balises SCRIPT, cela ne fonctionnera pas.
la source
Une autre chose à faire est de charger la page avec un script tel que:
Cela chargera la page, puis exécutera le script et supprimera le gestionnaire d'événements une fois la fonction exécutée. Cela ne fonctionnera pas immédiatement après un chargement ajax, mais si vous attendez que l'utilisateur entre l'élément div, cela fonctionnera très bien.
PS. Nécessite Jquery
la source