Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    74

    utilizzare array di una funzione in un'altra

    Ciao a tutti sto impazzendo per una cosa banale e che se isolo lo script mi riesce pure!!!
    ho questa funzione che calcola le coordinate geografiche :
    codice:
    function codeAddress(address){
            var via            = $("#via").val();
            var cap           = $("#cap").val();
            var address    = (via+' '+ cap);
     
        geocoder.geocode( { 'address': address}, function(results, status){
     
            if(status == google.maps.GeocoderStatus.OK){
         
                var lati     = results[0].geometry.location.lat();
                var longi    = results[0].geometry.location.lng();
            }else{     
            }     
        });
    }
    se mando in alert lati e longi le stampa correttamente, quindi il codice funziona, ora vorrei inserire in un array si la longitudine che la latitudine, quindi i valori di lati e longi per poterli riutilizzare in un'altra funzione, perci� scrivo cos� :

    codice:
    function codeAddress(address){
            var via            = $("#via").val();
            var cap            = $("#cap").val();
         
            var address    = (via+' '+cap);
         
        geocoder.geocode( { 'address': address}, function(results, status){
     
            if(status == google.maps.GeocoderStatus.OK){
         
                var lati     = results[0].geometry.location.lat();
                var longi    = results[0].geometry.location.lng();
             
                var esempio = new Array(lati, longi);         
            }else{         
            }
        });
     
        return(esempio);
    }

    per riprendere il valore dell'array nell'altra funzione scrivo:
    codice:
    $(document).ready(function() {
        valore = codeAddress(address);
       latitudine   = valore[0];
       longitudine= valore[1];
        alert(latitudine+' '+longitudine);
    });
    ma l'alert non stampa nulla, praticamento non riesco ad utilizzare i valori di lati e longi fuori dalla funzione codeAddress(address).

    spero di essere stato chiaro e grazie in anticipo
    "Gli eroi sono uomini comuni che compiono azioni straordinarie in momenti straordinari" - ( Dal film U-571 )

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ma la funzione codifica indirizzo quando la esegui? La variabile andress nel ready come la valorizzi? Hai provato a rendere la variabile esempio globale (fuori da ogni funzione)?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Ciao, c'è un po' di confusione sul codice. Posso dedurre che stai facendo un collage di qualche snippet copiaincollato chissà dove.

    Ad ogni modo fai intanto attenzione che la variabile esempio è dichiarata dentro una ulteriore funzione (cioè il callback definito per geocoder.geocode), cioè non direttamente su codeAddress. Questo significa che non può essere vista nel return che hai specificato.

    Ma anche se fosse dichiarata nella funzione, da cui poi parte il return, o a livello globale (vedi il suggerimento di cavicchiandrea) ho l'impressione che quel callback sia richiamato in modo asincrono; in altre parole quel return viene eseguito prima che il callback stesso sia eseguito. Per tale motivo non può restituire alcunché di ciò che succede dentro il callback stesso definito per geocode.

    In sostanza immagino che l'array che vuoi ottenere sul ready non possa essere definita se non dopo che venga eseguito quel callback.

    Una soluzione può essere quella di definire un callback sulla stessa funzione codeAddress, il quale però faccia riferimento a quello di geocode. Da quel callback sarà poi eseguito il resto del codice. Per me è più facile a farsi che a dirsi.

    Ora però non capisco perché vai a definire la variabile address come argomento della funzione e poi nuovamente come variabile dentro la funzione stessa (da qui il disappunto di cavicchiandrea e la mia deduzione che tu abbia fatto un collage poco rifinito).

    Provo comunque a dare una soluzione, vedi tu se può andare o essere in qualche modo adeguata per il tuo progetto:
    codice:
    function codeAddress(callback){
        var via = $("#via").val();
        var cap = $("#cap").val();
        var address = via+' '+cap;
        
        geocoder.geocode({ 'address': address}, function(results, status){
            if(status == google.maps.GeocoderStatus.OK){
                var loc = results[0].geometry.location;
                callback([loc.lat(), loc.lng()]); // qui la definizione e il passaggio dell'array da un callback all'altro
            }else{  
                
            }
        });
    }
    
    $(function(){
        codeAddress(function(tuoarray){
            var latitudine = tuoarray[0];
            var longitudine = tuoarray[1];
            alert(latitudine+' '+longitudine);
        });
    });
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    74
    Ciao a tutti e grazie per aver risposto,
    ebbene si il codice l'ho scaricato da internet, è uno script per trasformare un indirizzo in coordinate geografiche.
    La soluzione da te proposta funziona e di questo ti ringrazio veramente tanto!!! C'è solo un particolare che non
    capisco, come clicco sul tasto che richiama le funzioni, al primo click non succede nulla, dal secondo vedo a video gli alert della
    latitudine e della longitudine
    "Gli eroi sono uomini comuni che compiono azioni straordinarie in momenti straordinari" - ( Dal film U-571 )

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    74
    risolto avevo sbagliato io
    grazie tante a tutti un saluto
    "Gli eroi sono uomini comuni che compiono azioni straordinarie in momenti straordinari" - ( Dal film U-571 )

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 © 2025 vBulletin Solutions, Inc. All rights reserved.