Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    5

    scope callback function

    Ciao a tutti, sto utilizzando le api di Gmaps per una mia semplice applicazione, e ho bisogno di memorizzare in una variabile un parametro che viene passato alla funzione di callback:

    codice:
    address = $("#street").val() +" , "+$("#city").val()+" , "+$("#big_city").val()+" , " +$("#nation").val();
    var geocoder = new GClientGeocoder();
    var p;
    geocoder.getLatLng( address,
        		function(point) {
          			if (!point) {
            			alert(address + "L'INDIRIZZO INDICATO NON E' STATO TROVATO, CONSIDEREREMO COME TUA POSIZIONE IL LUOGO DA CUI TI CONNETTI");
    					p=-1000;
    				}else{
    					p=point;
    						
    				}
    			});
    alert(p);
    Quello che mi viene visualizzato dall'alert finale è "undefined". Questo perchè la variabile p non è visibile all'interno della funzione di callback. Io ho bisogno di memorizzare il valore di point, per utilizzarlo in un secondo momento nel codice.

    Un grazie in anticipo!!!

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    prova cosi function(point,p)
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    5
    no, purtroppo non funziona lo stesso

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    ma la variabile p è globale? Se non è cosi rendila globale (cioè fuori da ogni funzione)
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Ci sono due problemi in questo codice

    1) prima dell'alert (che è uno statement sincrono) hai una chiamata ad una funzione asincrona che quindi decrementa il valore di p solo dopo l'esecuzione dell'alert stesso.

    2) p inizialmente non ha alcun valore. Dovresti assegnargliene uno prima di incrementarlo o decrementarlo
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    5
    Ok, inizializzando la variabile p, continua a non funzionare anche se e' stata dichiarata come globale.
    Per quel che riguarda la chiamata asincrona, si ne sono consapevole, ed e' appunto questo il problema, vorrei evitare di scrivere un while(true) finche' l'esecuzione non finisce perche' i browser intelligenti mi bloccherebbero lo script, e settare un timeout e' un alternativa non valida.
    Esiste un modo per rendere sincrona la funzione di callback?

  7. #7
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    hai diverse soluzioni

    metti l'alert dento la funzione point()
    oppure da quella funzione ne chiami un altra che continua l'esecuzione del codice
    oppure usi i deferred objects in jquery e risolvi un deferred nella callback
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

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.