10
votes

JavaScript ne se charge pas après l'appel de Ajax

OK Le code HTML suivant est analysé lorsque je charge une page:

<div id="clip-wrapper">
<script type="text/javascript">
    alert("ajaxbla");
</script>
</div>


0 commentaires

4 Réponses :


1
votes

Mettez votre code dans

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    $(this).addClass("done");
  }
});


5 commentaires

J'ai essayé votre suggestion, il analyse le code HTML suivant:

$ (document) .Ready (Fonction () {Alerte ("TROLOL" );}); mais cela ne donne pas une alerte. Ps. Comment obtenir le code dans les commentaires?


C'est inclus, comme j'utilise WordPress.


Je ne t'ai pas dit, quelqu'un d'autre. Je n'ai pas +1 vous non plus, désolé.


@peterbond - Avez-vous essayé une fonction d'appel AJAX de la réponse éditée


Non, je ne l'ai pas, je n'utilise pas JQuery Désolé. I + 1'ed You (il a au moins dédié le -1 de quelqu'un d'autre) pour vos efforts, comme il semble que le code édité fonctionnera pour JQuery, en utilisant le succès. J'ai utilisé la solution fournie par @Adam Rayis et cela fonctionne comme un charme, également avec mon script réel (chargement d'un film dans JWPlayer, en fonction de ce que l'utilisateur a cliqué sur).



10
votes

S'il y a des scripts chargés dans votre DOM d'un appel Ajax, ils seront pas em> être exécutés pour des raisons de sécurité.

Pour que le script soit exécuté, vous devez le supprimer hors de la réponse et l'exécuter via eval code> p>

Idéalement, vous voudrez vouloir courir Votre script en tant que raclage fort> pour lorsque votre demande AJAX se termine. Si vous utilisez JQuery, ce serait l'événement STRUT> SUCCESS STORT> de votre appel AJAX, et si vous le faites de manière native, ce serait l'événement ReadyStatechange de votre objet XHR. P> edit forte> p>

Si vous souhaitez vraiment opter pour l'option EVAL, vous pouvez essayer quelque chose comme ceci: P>

document.getElementById(contentDiv).innerHTML = xmlHttp.responseText;
eval(document.getElementById("clip-wrapper").innerHTML);


7 commentaires

Pouvez-vous éloigner comment je peux le sortir de la réponse? Et passez-le à travers eval après? J'utilise le code suivant: STETCHANGED () {if (xmlhttp.readytstate == 4) document.getelementbyid (contentdiv) .innerhtml = xmlhttp.responseText; } où contentDiv est emballage à pince dans ce cas. (Est-ce aussi simple que Eval (xmlhttp.responsetext);?)


Ok je pense que j'ai bien, mais cela ne fonctionne toujours pas: si (xmlhttp.readytstate == 4) {document.getelementByID (contentdiv) .innerhtml = xmlhttp.responseText; eval (document.getelementbyid (contentdiv) .innerhtml); } est-ce que je manque quelque chose? Merci pour l'aide, appréciez vraiment cela!


Je ne pense pas que eval aime les étiquettes de script dans la présente - pouvez-vous renvoyer la réponse sans eux?


Cela n'implique-t-il pas que le DIV ne sera rempli que d'alerte ("msg"); de sorte qu'il ne fonctionnera pas comme code JavaScript? Ou suis-je compréhension de toi à tort?


Si cela vient de remplir d'alerte ("msg"), vous pouvez transmettre cela à Eval, et cela fonctionnera certainement - eval ("alerte (" msg ");"); marchera


Pour plus d'exemples: Stackoverflow.com/Questtions/978101/...


Si vous ne pouvez pas vous attacher à l'appel Ajax réel (car il est généré par C # dans mon cas) utilisez $ (document) .ajaxcomplete () et faites votre travail là-bas.



1
votes

Tout code à l'intérieur du corps entre script est exécuté uniquement lors du chargement du document.

dans l'appel d'Ajax, utilisez Callback ou SUCCESS: ou ONCOMPETE: Pour gérer la réponse AJAX si vous utilisez jQuery. < / p>


0 commentaires

0
votes

Vous voulez dire que le deuxième code HTML vient comme une réponse AJAX ?? Avez-vous même inséré le code HTML à la page en cours?

quelque chose comme, xxx

mais même avec innerhtml de remplacement je ne sais pas le script à l'intérieur, il sera exécuté automatiquement. Le navigateur va analyser le script mais ne l'exécute pas automatiquement. (Par exemple, si vous avez une fonction de la fonction dans le HTML, après l'appel AJAX, vous pourrez appeler ces fonctions)

Une autre option consiste à utiliser document .Write , il remplacera le contenu de la page entière avec le nouveau script HTML et le script Script . > J'espère que cela aide,


0 commentaires