Saltar al contenido

Ejecutando inyectado por innerHTML después de la llamada AJAX

Solución:

Usé este código, está funcionando bien

var arr = MyDiv.getElementsByTagName('script')
for (var n = 0; n < arr.length; n++)
    eval(arr[n].innerHTML)//run script inside div

JavaScript insertado como texto DOM no se ejecutará. Sin embargo, puede utilizar el patrón de secuencia de comandos dinámica para lograr su objetivo. La idea básica es mover la secuencia de comandos que desea ejecutar a un archivo externo y crear una etiqueta de secuencia de comandos cuando obtenga su respuesta Ajax. Luego configura el src atributo de su etiqueta de script y listo, carga y ejecuta el script externo.

Esta otra publicación de StackOverflow también puede serle útil: ¿Se pueden insertar scripts con innerHTML?

Si carga un bloque de script dentro de su div a través de Ajax de esta manera:

<div id="content">
    <script type="text/javascript">
    function myFunction() {
      //do something
    }
    myFunction();
    </script>
</div>

… simplemente actualiza el DOM de su página, myFunction () no necesariamente se llama.

Puede usar un método de devolución de llamada Ajax como el del método ajax () de jQuery para definir qué ejecutar cuando finalice la solicitud.

Lo que está haciendo es diferente a cargar una página con JavaScript incluido desde el principio (que se ejecuta).

Un ejemplo de cómo utilizar la devolución de llamada exitosa y la devolución de llamada de error después de obtener algún contenido:

  $.ajax({
    type: 'GET',
    url: 'response.php',
    timeout: 2000,
    success: function(data) {
      $("#content").html(data);
      myFunction();
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      alert("error retrieving content");
    }

Otra forma rápida y sucia es usar eval () para ejecutar cualquier código de script que haya insertado como texto DOM si no desea usar jQuery u otra biblioteca.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *