2008-10-25 16 views
20

Estoy trabajando en una página web que usa jQuery. Tengo una llamada Ajax que obtiene datos del servidor y actualiza un div. Dentro de esos datos hay una función jQuery, pero la función no se llama después de que los datos se cargan en la página. Ya tengo los archivos js adecuados incluidos en la página.Llamar a una función jQuery dentro de html return de una llamada AJAX

Esto es lo que se devuelve desde la llamada Ajax y se coloca en un div:

<script type="text/javascript"> 
    $(function() { 
     $('input').myFunction('param');    
    }); 
</script> 
<p> other html </p> 

¿Cómo consigo el javascript vuelto a correr tras el html se inserta en la página?

(estoy usando los carriles con el plugin jRails)

Respuesta

26

Si quieres evaluación de etiquetas JavaScript, con el contenido HTML, se debe configurar la opción de tipo de dato del Ajax llamada a "html":

$.ajax({ 
    type: "GET", 
    url: "yourPage.htm", 
    dataType: "html" 
}); 

O "guión" tipo de datos, si desea cargar y ejecutar un archivo .js:

$.ajax({ 
    type: "GET", 
    url: "test.js", 
    dataType: "script" 
}); 

información más aquí: Ajax/jQuery.ajax

7

Tuve un problema similar en el que quería agregar pequeños selectores de fecha jquery a un par de campos que estaba recuperando a través de ajax. esto es lo que hice para evitarlo ... solo rápido y sucio. En lugar de devolver toda esta cuadra de mi ajax llamada:

<script type="text/javascript"> 
    $(function() { 
     $('input').myFunction('param');       
    }); 
</script> 
<p> other html </p> 

volvería (observe la confeccionadas | x | separador)

$(function() { 
     $('input').myFunction('param');       
    }); 

|x| 

<p> other html </p> 

Luego, cuando he recibido los datos de nuevo a través de AJAX, lo dividir el valor de retorno en 2 partes: el código JavaScript que se ejecutará, y el hTML para mostrar:

r = returnvalfromajax.split("|x|");  
document.getElementById('whatever').innerHTML = r[1]; 
eval(r[0]); 
-7

han intentado método Sys.WebForms.PageRequestManager.add_endRequest?

$(document).ready(function() 
    { 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);   
    } 
    ); 
    function endRequestHandler(sender, args) 
    { 
     // whatever 
    } 
+5

¡No está utilizando ASP.NET! –

-1

Bueno, se puede utilizar la carga jQuery() Función: http://docs.jquery.com/Ajax/load#urldatacallback Como una devolución de llamada se puede definir la función que se ejecuta después de cargar el nuevo contenido ejemplo:

$ ("# feeds"). load ("new_content.html" ,, doSomething());

y en new_content.html puede definir la función doSomething() ...

-1

para ajax.net la solución endRequestHandler(sender, args) funciona bien, aunque

1

Cambio

<script type="text/javascript"> 
... 
</script> 

Para:

<script> 
... 
</script> 

Se arregló el problema para mí.

+0

No funciona para mí :( – joseantgv

Cuestiones relacionadas