La mia domanda riguarda Javascript. Ho una funzione di richiamata che riceve un oggetto posizione su un callback riuscito.Javascript che assegna il valore di ritorno di una funzione di callback alla variabile globale
Il problema è che quando provo ad impostare le proprietà dell'oggetto Position su una variabile globale con una callback corretta, non mi lascia fare e il globale rimane indefinito.
Come soluzione alternativa a quella invece di impostare direttamente le proprietà dell'oggetto su variabili globali, sto tentando di restituirlo tramite la funzione di callback ma non sono riuscito a trovare un modo per impostare il valore restituito della funzione di callback su un valore globale variabile.
Ecco il codice semplificato.
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
//on Successful callback receives a Position Object
function onSuccess(position) {
var coords = position.coords;
x=coords; // Setting directly to an object does not work x still remains undefined after succesful callback
return coord; // Trying to set this to a global object
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
realmente buon punto, la mia risposta è una svista stupido da parte mia. il codice non è lineare quindi è necessario fare tutto ciò che si vuole fare con i coords nella callback, per assicurarsi che il valore sia stato associato – WickyNilliams
In realtà hai ragione. La funzione getCurrentPosition sta cercando di ottenere la geolocalizzazione che è asincrona è per questo che quando provo ad accedervi dalla variabile globale probabilmente non è impostato e restituito indefinito. Non c'è modo di assegnare la variabile per restituire il valore dopo che la funzione asincrona viene eseguita con il suo lavoro? –
@Torukojin: No, dove deve essere restituito il valore? Come detto, il codice funziona in modo asincrono. Ecco perché il valore viene passato come parametro alla funzione di callback in modo che tu possa usarlo e fare quello che vuoi con esso. Se fosse possibile restituire il valore, allora 'getCurrentPosition' lo farebbe. Ma non lo è, quindi hai fornito una richiamata. Forse troverai [questo articolo] (http://felix-kling.de/blog/2011/01/14/how-to-return-data-from-an-ajax-call/) utile per capire il problema (ma non sono così bravo a scrivere;)) –