2009-09-04 31 views
10

Estoy construyendo un sitio usando ASP.NET MVC, y tengo vistas parciales que usan jQuery para hacer varias cosas. Estaba pensando en cambiar a la API AJAX de Google y usar su cargador para cargar jQuery. Sin embargo, noté que ya no podría usar $(document).ready() porque el cargador de Google especifica una devolución de llamada google.setOnLoadCallback().¿Está bien usar google.setOnLoadCallback varias veces?

Esto es un poco un problema para mí porque tengo $(document).ready() en varias vistas parciales porque hacen cosas diferentes específicas de sí mismas que no quiero que la vista principal tenga en cuenta.

¿Puedo especificar varias devoluciones de llamada y simplemente cambiar el $(document).ready() con google.setOnLoadCallback(someUniqueCallbackFunction)?

¿Sería esa la forma ideal de manejar esta situación o hay algo más que se prefiera?

+0

Para estas vistas parciales, ¿las está representando con la página o dinámicamente (por ejemplo, a través de una pestaña ajax)? – jmarnold

+0

en una página normal. No estoy usando AJAX en este punto. – Joseph

Respuesta

0

Me puede estar faltando el punto aquí, pero no hay conflicto entre tus controles de usuario $ (documento) .ready y google.setOnLoadCallback que yo sepa.

Suponiendo que está utilizando google para cargar jquery, su código en $ (document) .ready no se ejecutará hasta que google haya cargado jquery de todos modos.

Mientras jQuery se cargue en su página maestra, no estoy seguro de cuál es el problema.

+0

Lo probaré y veré si funciona. Intenté usar setOnLoadCallback y $ (document) .ready en el mismo archivo html en Google API Playground y no me gustó. ¡Aunque tal vez estoy bien con los controles de usuario! – Joseph

+1

Eso parece funcionar bien. Tengo un archivo maestro que usa google.load (jquery) y luego, en una vista, estoy usando $ (document) .ready y está funcionando bien. – Joseph

32

Sí, puede usar setOnLoadCallback en lugar de $(document).ready. Hay un SEGUNDO PARÁMETRO indocumentado (o al menos, no puedo encontrarlo) que especifica cuándo llamar a la función de devolución de llamada; los valores posibles son "falso" (predeterminado) - en la carga de la ventana, o "verdadero" - en la carga DOM (DOMContentLoaded). El evento DOM se desencadena una vez que se ha cargado todo el marcado (mucho antes que window.load). El evento de carga de ventana se dispara después de que todas las imágenes y scripts hayan terminado de cargarse.

// Very similar to $(document).ready() 
google.setOnLoadCallback(OnLoad, true); 

// Very similar to $(window).load() 
// Same as google.setOnLoadCallback(OnLoad, false); 
google.setOnLoadCallback(OnLoad); 

Sí, es posible utilizar setOnLoadCallback varias veces en una sola página. Esta es una característica no documentada muy importante de la API de AJAX (no documentada a partir de esta publicación). Cada vez que llamas a setOnLoadCallback, se acumulan todas las funciones a las que se llama una vez que se carga el DOM o la ventana.

+0

Esto es lo que me ayudó. Desearía que esto estuviera mejor documentado. – mdoar

+0

Usted acaba de hacer mi día. – Wistar

+0

Ahora está [documentado] (https://developers.google.com/chart/interactive/docs/basic_multiple_charts) que 'setOnLoadCallback' se puede invocar varias veces. – GSerg

1

Me encontré con el mismo problema. Busqué en google tengo 2 búsquedas de google ejecutándose en una página, etc ...

Al final encontré esto y porque quería tener 2 paneles mostrando esencialmente los resultados de búsqueda de Google en una página.

google.setOnLoadCallback(LoadGoogleNewsResults); 
google.setOnLoadCallback(LoadGoogleNewsResultsForum); 

Esto funcionó para mí :)

El código está en http://login.debt-line.org.uk, simplemente haga clic en Ver código fuente.

Cuestiones relacionadas