2009-09-30 7 views
2

Je reçois une donnée de succès de sortie ajax. Où les données contiennent du texte html et un script.comment exécuter le script de sortie ajax

Mais le script ne s'exécute pas, comment puis-je exécuter le script.

Disons que obj de réponse Ajax est

<div>something....</div><script>alert("test");</script> 

le code ci-dessus est mon Ajax réponse.Dispositif div est rendu se, mais l'alerte ne fonctionne pas.

+0

Vous n'obtiendrez pas de réponse tant que vous n'aurez pas envoyé de code afin que nous sachions exactement à quoi vous avez affaire. –

+0

Vous devez ajouter plus d'informations.Pouvez-vous nous donner un exemple du texte/script retourné? Comment essayez-vous actuellement "d'exécuter le script"? – Seph

+0

Désolé, vous devrez inclure beaucoup plus d'informations que cela. –

Répondre

0

En utilisant jQuery est ici d'un simple morceau de code:

$.ajax({ 
    type: "POST", 
    url: "getData.asmx/HelloWorld", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(result) { 
     alert(result); 
    } 
}); 

Mais, d'utiliser effectivement les résultats du résultat variable I fini par utiliser une librairie javascript , de http://www.json.org/js.html, je l'ai fait:

success: function(result) { 
    var myData = JSON.parse(result.d); 

Il y a probablement de meilleures approches, mais cela était simple, et a travaillé pour moi, donc je viens de l'utiliser. Plus tard, lorsque le projet sera en production, je pourrai revenir en arrière et nettoyer cela, mais c'est après que tout fonctionnera.

2

Si vous récupérez le résultat formaté JSON à partir d'un appel AJAX, vous pouvez simplement utiliser eval pour exécuter le javascript.

On suppose, si le résultat JSON est formé comme celui-ci

var res = '{"Data": "<something>", 
       "script": "alert(something)"}'; 

    var out = eval("(" + res + ")"); 
    var data = out.data; 
    eval(out.script); 
+0

C'est probablement une mauvaise idée. Je pourrais facilement envoyer mon propre JSON qui pourrait contenir du javascript malicieux et il s'exécuterait sans problème ... – SpaDusA

+0

@SpaDusA Je ne le recommanderais pas à un programmeur débutant mais c'est comme ça que JSON est géré. L'utilisation de HTTPS améliorera la sécurité, mais si tous vos accès sont à votre serveur, alors vous contrôlez les scripts envoyés à vos clients. –

1

En supposant que vous n'utilisez pas JSON ou jQuery, ou toute autre bibliothèque, et votre appel AJAX retourne du code HTML et/ou javascript qui est ajouté à votre document existant (par exemple en utilisant innerHTML), tout javascript retourné en utilisant AJAX ne s'exécutera pas dans le navigateur - à l'exception des événements sur les éléments dans le code HTML.

Ainsi, si votre appel AJAX renvoie <input type="button" value="Click me" onclick="alert('hello');" />, l'alerte js fonctionnera correctement, mais si votre appel AJAX renvoie <script type="text/javascript">alert('hello');</script>, il ne s'exécutera pas. Dans ce cas, vous devez analyser le résultat pour extraire le javascript et l'exécuter, en utilisant une fonction telle que celle-ci:

function extract_and_execute_js(output_to_parse) 
{  
    if(output_to_parse != '')  
    {  
     var script = ""; 
     output_to_parse = output_to_parse.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){if (output_to_parse !== null) script += arguments[1] + '\n';return '';}); 
     if(script) 
     { 
      if (window.execScript) 
      { 
       window.execScript(script); 
      } 
      else 
      { 
       window.setTimeout(script, 0); 
      } 
     } 
    } 
} 
1

Il est intéressant, j'utilise jQuery et en utilisant la fonction html() a été suffisant pour obtenir le JavaScript à exécuter. Donc plus ou moins je n'avais rien de spécial à faire.

Il existe une version simplifiée:

var myform = $('form#form-id'); 
$.post(myform.attr('action'), myform.serialize(), function(response) { 
    $('#some-id').html(response.message); 
} 

Dans mon cas, le code lancé automatiquement, donc je ne l'ai pas besoin d'aucune autre des solutions proposées ici.

Questions connexes