2010-01-28 65 views
5

Las respuestas XML de mi aplicación web tienen tanto HTML para agregar a la página Y algunas tienen una secuencia de comandos para ejecutarse.jQuery: Evaluar script en la respuesta ajax

Estoy intentando enviar de vuelta XML desde mi aplicación web como:

<?xml version="1.0"?> 
<doc> 
    <html-to-insert> 
    <![CDATA[<p>add me to the page</p>]]> 
    </html-to-insert> 
    <script> 
    <![CDATA[ alert('execute me'); ]]> 
    </script> 
</doc> 

Lo que estoy haciendo ahora es Saliendo del <html-to-insert> y <script> CDATA, insertando el código HTML en la página y eval'ing <script> .

Estoy buscando críticas sobre mi enfoque. ¿Alguna sugerencia de alguien?

Respuesta

2

Prefiere enviar JSON, es mucho más fácil de interpretar. Ejemplo:

// Suppose your response is a string: 
// { html: "<p>add me to the page</p>, script:"alert('execute me');" } 
var obj = eval("(" + response + ")") ; 
eval(obj.script) ; 
0

JSON sería más adecuado para este propósito que XML imho.

8

Usted puede utilizar el jQuery biblioteca para hacer la solicitud XML a su backend y también analizarlo

$(document).ready(function() 
{ 
    $.ajax({ 
    type: "GET", 
    url: "your/url/that/returns/xml", 
    dataType: "xml", 
    success: function (xml) { 
     // xml contains the returned xml from the backend 

     $("body").append($(xml).find("html-to-insert").eq(0)); 
     eval($(xml).find("script").text()); 
    } 
    }); 
}); 

Puede encontrar más información sobre jQuery here y here

No lo he probado, pero debería funcionar de acuerdo con this article.

2

This es la mejor respuesta que encontré. Trabajo perfecto:


element.innerHTML = xmlhttp.responseText; 
var scriptElements = element.getElementsByTagName('SCRIPT'); 
for (i = 0; i < scriptElements.length; i ++) { 
    var scriptElement = document.createElement('SCRIPT'); 
    scriptElement.type = 'text/javascript'; 
    if (!scriptElements[i].src) { 
     scriptElement.innerHTML = scriptElements[i].innerHTML; 
    } else { 
     scriptElement.src = scriptElements[i].src; 
    } 
    document.head.appendChild(scriptElement); 
} 

Gracias a Joseph the Dreamer. Respuesta original here.

EDIT:

Aclaración:

  1. sólo de scripts se ejecutan dentro script etiqueta
  2. añadido guiones después de la carga de documentos, sólo tienen efecto si se añade a la head etiqueta

Gracias a Deniz Porsuk por el comentario para mejorar la respuesta

+0

Si anexaChild sus scripts dentro de las etiquetas div. No serán ejecutados por el navegador. Los scripts deben agregarse con la etiqueta "script". –

+0

¿De qué divs estás hablando? Utilizo la etiqueta de script 'var scriptElement = document.createElement ('SCRIPT');'. Explica tu comentario por favor. – IgniteCoders

+0

Sí, esta es la verdadera manera. Pero si creas tu script dentro de div como var divElement = document.createElement ('div'); y empuje innerHTML desde scriptElement = document.createElement ('SCRIPT'); divElement.innerHTML = scriptElement; la secuencia de comandos no será ejecutada por el navegador. –

Cuestiones relacionadas