2012-08-28 11 views
7

Desidero utilizzare google api per disegnare grafici nel mio sito web. Tuttavia, sto avendo problemi con la funzione google.setOnLoadCallback. Ecco il mio codice (semplificato):google.setOnLoadCallback() non funziona dal file JS separato

TENTATIVO 1: (Funziona bene)

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript" src="js/styling.js"></script> 
<script type="text/javascript"> 

    // Load the Visualization API and the piechart package. 
    google.load('visualization', '1.0', {'packages':['corechart']}); 

    // Set a callback to run when the Google Visualization API is loaded. 
    google.setOnLoadCallback(helloWorld); 

    function helloWorld() { 
     alert("Hello World"); 
    } 

</script> 

TENTATIVO 2: (Funziona bene)

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript" src="js/styling.js"></script> 
<script type="text/javascript"> 

    // Load the Visualization API and the piechart package. 
    google.load('visualization', '1.0', {'packages':['corechart']}); 

    // Set a callback to run when the Google Visualization API is loaded. 
    google.setOnLoadCallback(helloWorld); 

</script> 

e nelle styling.js scrivo:

function helloWorld() { 
    alert("Hello World"); 
} 

In questo caso, tutto funziona perfettamente.

Tuttavia ... TENTATIVO 3 (non riesce!)

<script type="text/javascript" src="js/styling.js"></script> 

E in styling.js scrivo:

window.onload = function() { 
    // Load the Visualization API and the piechart package. 
    google.load('visualization', '1.0', {'packages':['corechart']}); 

    // Set a callback to run when the Google Visualization API is loaded. 
    google.setOnLoadCallback(helloWorld); 
} 

function helloWorld() { 
    alert("Hello World"); 
} 

Questo non funziona. Sembra che lo helloWorld() non venga chiamato affatto.

Perché?

risposta

1

Direi che l'evento setOnLoadCallback non viene attivato, poiché si sta definendo il callback quando l'evento caricato in una pagina è già stato attivato.

È sufficiente mantenere google.setOnLoadCallback(helloWorld); e function helloWorld() {...} al di fuori del contesto di richiamata caricato su pagina (entrambi, altrimenti si avrebbero problemi di contesto).

Problemi correlati