Estoy tratando de usar devoluciones de llamada asíncronas Ajax con griales. En mi cabeza de archivo gsp tengo:

    <g:javascript library="prototype" />

En el cuerpo tengo:

        <g:remoteLink controller="dashboard" action="showTime" update="time">Show the Time</g:remoteLink> 

    <div id="time"></div>

En mi controlador tengo:

    def showTime = {
         System.print("time");
         render "The time is ";
}

Esperaría que el "tiempo" div en mi archivo gsp fuera reemplazado por el texto renderizado "El tiempo es". En cambio, nada parece suceder. Sé que mi controlador se dispara, debido al System.print, pero no se actualiza nada en el div.

Noté que al cargar la página, aparece este error generado: "element.dispatch no es un evento" en la página prototype.js. Si me quito

 <g:javascript library="prototype" />

Ya no recibo ese error, pero toda la página se redirige al panel de control / showTime

¿Qué estoy haciendo mal aquí?

Gracias jason

0
jason 1 feb. 2012 a las 01:18
¿Qué versión de Grails estás usando? ¿Ha intentado usar la biblioteca jquery javascript?
 – 
seth.miller
1 feb. 2012 a las 01:35
Hola Seth, estoy usando 1.3.7. Si uso jquery en lugar de prototype, ¿cómo cambiaría mi código anterior? Todavía soy un poco nuevo en ajax. Gracias
 – 
jason
1 feb. 2012 a las 01:43
Si tiene el complemento jQuery instalado, agregará un proveedor jquery que se encargará de construir las devoluciones de llamada ajax. Para usar el complemento, debe usar <g:javascript library="jquery" /> en lugar de <g:javascript library="prototype" /> en su archivo gsp.
 – 
seth.miller
1 feb. 2012 a las 01:55
También agregaré que el error de javascript que está recibiendo es probablemente la causa de su problema, pero me temo que no sé cómo solucionarlo.
 – 
seth.miller
1 feb. 2012 a las 01:57
¡estupendo! Instalaré el complemento y lo intentaré. Gracias
 – 
jason
1 feb. 2012 a las 01:58

1 respuesta

La mejor respuesta

¿Está utilizando tanto jquery (o alguna otra biblioteca JS) como bibliotecas de prototipos? Este problema generalmente se debe al uso de AMBOS jquery.js y prototype.js. Es posible que no vea que se está cargando jquery (tal vez esté en el diseño o en el , verifique las bibliotecas JS cargadas usando firebug.

Si está cargando ambos, comente jquery y simplemente use prototype. Compruébelo de nuevo y debería estar funcionando, actualizando el

. Espero que eso ayude.

0
ibaralf 2 feb. 2012 a las 02:43