0 votes

Exécution de fonctions Javascript à partir d'une réponse AJAX - HTML

J'ai une page Web qui affiche des commentaires et les utilisateurs peuvent cliquer sur un lien "Signaler" pour signaler un commentaire inapproprié.

Lorsqu'ils cliquent sur le lien Signaler, j'utilise AJAX et innerHTML pour afficher une liste déroulante sous le commentaire avec un code de raison, par exemple spam, offensant, sans rapport avec le sujet, etc. ainsi qu'un bouton Annuler.

Si l'utilisateur clique sur "Submit", je veux utiliser une autre requête AJAX pour envoyer sa réponse à un fichier PHP, où la base de données est mise à jour, et il reçoit un "Thank you" de son côté (sans recharger la page). Je veux essentiellement que le DIV qui affiche la liste déroulante soit remplacé par "Merci" à l'aide d'une autre demande AJAX.

C'est là qu'est le problème. Il semble que je ne puisse pas exécuter une demande AJAX à partir de la réponse HTML de la première demande AJAX. Les fonctions JavaScript échouent - même un simple Alert('hello world') ne fonctionne pas. J'ai essayé de placer les fonctions JavaScript dans la page principale qui appelle la première demande AJAX, ainsi que dans le fichier PHP qui s'affiche comme la réponse HTML de la première demande AJAX, mais je n'ai pas eu de chance - les fonctions ne s'exécutent tout simplement pas lorsqu'elles sont appelées.

Tout fonctionne bien si je charge le fichier PHP en externe, je sais donc que le JavaScript est correct. Mais cela ne fonctionne pas lorsque je charge le fichier PHP dans le DIV de réponse HTML et que j'appelle le JavaScript à partir de là.

Donc, pour résumer, comment exécuter des fonctions JavaScript à partir de la réponse HTML d'une requête AJAX ?

EDIT : voici un exemple de ce que je veux faire :

Il s'agit de la partie AJAX qui remplit le DIV lorsque la personne clique sur le lien Drapeau :

xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4)
{
     document.getElementById(whichdiv).innerHTML=xmlhttp.responseText;
}
};

La valeur de xmlhttp.responseText provient de ce fichier externe :

<input type="hidden"/>
<script type="text/javascript" language="javascript">
function displayalert()
{
    alert ('Hello World!');
}
</script>

<form name="myform" id="myform">
<input type="text" name="myfield" value="teststring"/><br/>
<input type="button" name="button" value="Submit" 
   onclick="displayalert();"/>
</form>

Remarque : le <input type="hidden"/> Ce qui précède vient d'une suggestion que j'ai trouvée sur le site http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx .

Lorsque l'utilisateur clique sur le bouton, la fonction javascript displayalert() ne s'exécute pas. La boîte d'alerte ne s'affiche jamais. Si je charge le fichier en externe au lieu de l'appeler avec innerHTML, le script fonctionne bien.

Le xmlhttp.responseText peut-il contenir du code JavaScript ?

0voto

mkoryak Points 18135

Dépend du navigateur : IE ne supporte pas scriptEval sur le html qui est chargé avec ajax, ce qui signifie que si vous avez des blocs script dans votre html, ils ne seront pas appelés.

Firefox supporte script eval.

Ce que je fais habituellement, c'est d'insérer du json dans une entrée, puis de vérifier si le navigateur supporte scriptEval, et si ce n'est pas le cas, de récupérer le json, de l'évaluer, et d'appeler une méthode en passant le json.

si le navigateur supporte scriptEval, j'inclus également un bloc script qui contient un appel à la même méthode avec le json.

vous voudrez peut-être aussi lire ceci : http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X