Pourquoi l'exécution de JavaScript n'est-elle pas exécutée lorsqu'elle est insérée en réponse à un appel ajax?

Insérer JavaScript dans le fichier .innerHTML ne l'entraîne pas.

J'ai ce que j'appelle un mini-flux dans lequel un utilisateur soumet une publication. Ceci déclenche un appel ajax qui enregistre les données utilisateur dans la table mysql. À partir de là, PHP génère le xhtml. De là, le PHP généré xhtml est renvoyé à javascript en tant que texte de réponse. Ce xhtml contient javascript intégré utilisé pour afficher "assez temps".

Maintenant, si PHP generatd xhtml / javascript est envoyé au client d'une manière non-ajax, cela fonctionne. Mais quand je l'envoie comme responseText, puis met à jour le DOM en utilisant .innerHTML il ne fonctionne pas. Quel que soit le mécanisme qui reprend javacript avec XHTML ne semble pas aimer le javascript intégré écrit dans la propriété .innerHTML de la marque div divisée.

Existe-t-il une solution facile pour cela? Ou est-ce que je dois construire l'IU avec javascript sans simplement l'insérer dans innerHTML … dans une publication précédente, quelqu'un a mentionné que .innerHTML n'était pas une bonne pratique. C'est peut-être ce qu'ils voulaient dire.

Le code suivant devrait fonctionner:

function onSuccess() { src = document.createElement('script'); src.innerHTML = this.responseText; document.body.appendChild(src); } 

Mais je suis d'accord avec cwallenpoole que pourquoi ne pas avoir tout ce code javascript (pour jolies dates) soit déjà écrit en avance sur la page principale? (Ou un script inclus ou quelque chose).

Vous avez raison, innerHTML ne le fera pas, si vous souhaitez créer une balise de script dynamiquement, vous devez utiliser document.createElement pour créer une balise de script, mais vous avez tous les mêmes bonus de sécurité associés à eval .

Voilà une autre idée. Ne serait-il pas préférable d'avoir une fonction définie dans la page principale qui, après avoir ajouté quelque chose de nouveau, définit la date en mode "joli" sans avoir besoin de la réponse AJAX à ce sujet?