2011-12-09 12 views
9

Ok el siguiente código HTML se analiza cuando me carga una página:Javascript no se carga después de AJAX llamada

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

Obviamente, esto conduce a una alerta diciendo "bla", después de mi llamada AJAX, HTML analizada la el código se ve así:

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

Esto, por otro lado, no genera una alerta. ¿Por qué? ¿Y cómo soluciono esto?

+0

verificación de la respuesta editado –

Respuesta

8

Si hay scripts cargados en su dom desde una llamada Ajax, se ejecutarán no por razones de seguridad.

Para obtener la secuencia de comandos a ejecutar, que necesita para despojarlo de la respuesta, y ejecutarlo a través de eval

Idealmente embargo, tendrá que ejecutar la secuencia de comandos como una devolución de llamada para cuandotu solicitud de ajax se completa. Si está utilizando jQuery, este sería el evento éxito de su llamada ajax, y si lo está haciendo de forma nativa, sería el evento readyStateChange de su objeto xhr.

EDITAR

Si realmente quiere optar por la opción eval, podría intentar algo como esto:

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

¿Puedes saber cómo puedo sacarlo de la respuesta? Y ejecutarlo a través de eval luego? Estoy usando el siguiente código: 'function stateChanged() { if (xmlHttp.readyState == 4) document.getElementById (contentDiv) .innerHTML = xmlHttp.responseText; } ' donde contentDiv es clip-wrapper en este caso. (¿Es tan simple como eval (xmlHttp.responseText);?) – pbond

+0

Ok, creo que lo tengo bien, pero todavía no funciona: 'if (xmlHttp.readyState == 4) { document.getElementById (contentDiv)) .innerHTML = xmlHttp.responseText; eval (document.getElementById (contentDiv) .innerHTML); } ' ¿Me falta algo? Gracias por la ayuda, realmente lo aprecio! – pbond

+1

No creo que a eval le gusten las etiquetas de scripts, ¿puede devolver la respuesta sin ellas? –

1

pondrá código en

$(document).ready(function() 
{ 
    alert(msg); 
}); 

o hacer uso del evento readysatchange del objeto XMLHttp.

XMLHttpobject.readyStateChange(furnction() { alert('msg'); }); 

Editar

si está utilizando jQuery que ir a por

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

aquí en caso de éxito se puede escribir el código que se ejecutan una vez que haya terminado con el Ajax.

+0

He intentado su sugerencia, que analiza el código HTML siguiente:

pero no da una alerta. PS. cómo obtener código en los comentarios? – pbond

+0

hey, necesitas incluir jQuery para eso ................. –

+0

Está incluido, ya que estoy usando Wordpress. – pbond

1

cualquier código dentro del cuerpo en el medio script etiqueta solo ejecutada durante la carga de la documento.

en llamada ajax, utilice callback o success: o oncomplete: para manejar la respuesta de ajax si está utilizando jQuery.

0

¿Quiere decir que el segundo código html viene como una respuesta de Ajax? ¿Incluso insertó el html en la página actual?

Algo así como,

document.body.innerHTML = ajax_response; 

Pero incluso con innerHTML reemplazo no lo hago cosa que el script del mismo será ejecutado automático. El navegador analizará el script pero no lo ejecutará automáticamente.(Por ejemplo, si usted tiene una definición function en el html, después de llamar al Ajax usted será capaz de llamar a esas funciones)

Otra opción es utilizar document.write, que sustituirá a todo el contenido de la página con el nuevo html y las etiquetas script se ejecutarán automáticamente.

document.write(ajax_response); 

Espero que esto ayude,

Cuestiones relacionadas