2009-09-04 3 views
10

Sto costruendo un sito usando ASP.NET MVC e ho viste parziali che usano jQuery per fare varie cose. Stavo pensando di passare all'API AJAX di Google e utilizzare il caricatore per caricare jQuery. Tuttavia, ho notato che non sarei più in grado di utilizzare $(document).ready() perché il caricatore di Google specifica una callback google.setOnLoadCallback().È ok utilizzare google.setOnLoadCallback più volte?

Questo è un po 'un problema per me perché ho $(document).ready() in varie viste parziali perché fanno cose diverse specifiche per se stessi che non voglio che la vista genitore sia a conoscenza.

È possibile specificare più richiamate e sostituire lo $(document).ready() con google.setOnLoadCallback(someUniqueCallbackFunction)?

Questo sarebbe il modo ideale per gestire questa situazione o c'è qualcos'altro che è preferito?

+0

Per queste viste parziali, le stai facendo con la pagina o dinamicamente (ad esempio, attraverso una scheda Ajax)? – jmarnold

+0

In una pagina normale. Non sto usando AJAX a questo punto. – Joseph

risposta

0

Potrei mancare il punto qui, ma non c'è nessuno scontro tra i vostri usercontrols $ (documento) .ready e google.setOnLoadCallback che io conosca.

Supponendo che tu stia utilizzando google per caricare jquery, il tuo codice in $ (documento) .ready non verrà eseguito fino a quando Google ha caricato jquery comunque.

Fintanto che jQuery viene caricato nella tua pagina principale, non è sicuro quale sia il problema.

+0

Ci provo e vediamo se funziona. Ho provato a utilizzare setOnLoadCallback e $ (document) .ready nello stesso file html nel Google API Playground e non è piaciuto. Forse sto bene con i controlli utente, però! – Joseph

+1

Sembra funzionare bene. Ho un file master che utilizza google.load (jquery) e successivamente in una vista sto usando $ (document) .ready e funziona bene! – Joseph

32

Sì, è possibile utilizzare setOnLoadCallback invece di $(document).ready. C'è un SECOND PARAMETER non documentato (o almeno, non riesco a trovarlo) che specifica quando chiamare la funzione di callback; i possibili valori sono "false" (predefinito) - sul caricamento della finestra, o "true" - sul carico DOM (DOMContentLoaded). L'evento DOM si attiva una volta caricato tutto il markup (molto prima di window.load). L'evento di caricamento della finestra si attiva dopo tutte le immagini e gli script e il caricamento è terminato.

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

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

Sì, è possibile utilizzare setOnLoadCallback più volte in una singola pagina. Questa è una funzionalità non documentata molto importante dell'API AJAX (non documentata al momento della pubblicazione). Ogni volta che chiami setOnLoadCallback, impila tutte le funzioni da chiamare una volta caricato il DOM o la finestra.

+0

Questo è ciò che mi ha aiutato. Vorrei che questo fosse meglio documentato. – mdoar

+0

Hai appena fatto la mia giornata. – Wistar

+0

Ora è [documentato] (https://developers.google.com/chart/interactive/docs/basic_multiple_charts) che 'setOnLoadCallback' può essere chiamato più volte. – GSerg

1

Mi sono imbattuto nello stesso problema. Ho cercato su Google 2 ricerche in google su una pagina, ecc ...

Alla fine ho trovato questo e perché volevo avere 2 pannelli in sostanza che mostra i risultati di ricerca di Google su una pagina.

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

questo ha lavorato per me :)

Il codice è il http://login.debt-line.org.uk, basta cliccare vista origine.