Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema variabili javascript Google Maps

    Salve, vorrei chiedere il vostro aiuto per un problema che ho e che mi sta creando problemi da parecchi giorni..

    Io ho questo codice:
    Codice PHP:
    <body onload="initialize()" onunload="GUnload()">
    <script src="http://maps.google.com/?file=api&amp;v=2.x&amp;key=MIAKEY" type="text/javascript"></script>
    <script type='text/javascript'>
    var map;
    var geocoder = null;
    var indirizzo;
    var latitudine;
    var longitudine;
      
    function initialize() {
      if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map_canvas"));
          geocoder = new GClientGeocoder();
      }
            geocoder.getLatLng('<?php echo $indirizzo ?>', function(coordinate) {
            map.setCenter(coordinate, 15);
            var marker = new GMarker(coordinate);
            map.addOverlay(marker);
            latitudine = coordinate.lat();
            longitudine = coordinate.lng();
            sisisi = latitudine;
          });
        alert (sisisi); <-- questo alert mi restituisce 'undefinited'
    }
    sisisi = ""; <-- se inserisco questo
    document.onclick = function(){alert(sisisi)}; <-- e inserisco pure questo, guardate la spiegazione sotto ;)
    </script>

    <div id="map_canvas" style="width: 10px; height: 10px; display: none"></div>
    in parole povere, io voglio portare fuori dalla funzione i valori impostati in latitudine e longitudine, ma se stampo un alert appena terminata la funzione mi viene restituito 'undefinited', mentre se inserisco quelle due linee di codice con di fianco <-- se inserisco questo, quando clicco sulla pagina, la variabile che mi passo (che sia latitudine, longitudine o entrambi) mi viene alertata correttamente..

    ora io mi chiedo, che differenza potrà mai esserci tra richiamarlo con un semplice alert appena terminata la funzione (che non funziona) e chiamarlo con un document.onclick a funzione terminata da un pezzo (e questo funziona)??? :S

    qualcuno sa suggerirmi un modo per passarmi quelle due benedette variabili potendole riutilizzare dove c'è sisisi = ""; a mio piacimento senza doverci cliccare, anche perchè le coordinate dovrebbero essere prese senza che chi stia visualizzando la pagina se ne accorga, mica posso chiedergli di cliccare :P

    Grazie mille anticipatamente

  2. #2
    se provi a mettere due alert in questo modo
    codice:
      geocoder.getLatLng('brescia, viale piave 18', 
        function(coordinate) {
          map.setCenter(coordinate, 15);
          var marker = new GMarker(coordinate);
          map.addOverlay(marker);
          latitudine = coordinate.lat();
          longitudine = coordinate.lng();
          sisisi = latitudine;
          alert ("1");
        }
      );    
      alert("2");
    vedrai che viene stampato prima 2 e successivamente 1. Ed è per lo stesso motivo che quando vai a stampare la tua variabile fuori dalla funzione la trovi vuota. getLatLng() è una richiesta asincrona e quindi non sapendo quando verrà completata, l'unica certezza che hai è che nel corpo della funzione quei valori sono significativi.
    A meno di suggerimenti migliori, perchè non fare tutto quello che devi fare dentro la funzione?

  3. #3
    perchè io ci provavo ma non veniva fuori l'alert, come se dopo che avessi impostato le 2 variabili non succedesse più niente O_O

    quello che non capisco è perchè non si sa quando verrà completata.. la funzione initialize() è avviata al caricamento della pagina, e tutto quello che è nelle {} della funzione dovrebbe essere avviata.. mi dici che non è così??

    scusa ma io so il php, il javascript per me è arabo e vado a tentoni, cercando codice in internet e riadattando

    in php se sbagli l'ordine sfalsi tutto perchè viene eseguito tutto nel medesimo ordine in cui è strutturato.. o forse è un 'problema' di google maps??

    comunque sembrerebbe che funzioni, ora al posto di stampare l'alert devo fare in modo che si refreshi automaticamente la pagina.. vediamo cosa riesco a combinare :P

    intanto grazie mille

  4. #4
    sì, preciso solo che non stavo parlando della funzione initialize(), quella viene eseguita come dici tu. Io sto parlando della callback della funzione getLatLng(), è getLatLng() la chiamata asincrona che non sai quando termina. Io farei tutto lì dentro a meno, ripeto, di idee migliori da parte di qualcun altro del forum

  5. #5
    ah ok.. si, comunque sono riuscito a fare quello che mi serviva tutto all'interno della funzione e non ho nessun problema..

    non so perchè ma prima era come se dopo queste due righe:

    latitudine = coordinate.lat();
    longitudine = coordinate.lng();

    tutto quello che scrivevo non veniva eseguito.. boh :S

    comunque sono riuscito a fare tutto, grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.