Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, não tenho muita prática com JavaScript (tive contato apenas durante um período no CEDERJ). Ocorre que agora preciso do bendito, e não estou conseguindo sair de uma situação. Vou postar o código:
<script language="JavaScript">
coordenadas = ""; //Defini essa variável segundo meus conhecimentos, por ter omitido a palavra 'var' ela é global
function sucesso(posicao) {
coordenadas = posicao.coords.latitude;
//document.write(coordenadas); //Aqui dentro ela escreve o valor da latitude
}
if('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition(sucesso);
}
else {
alert("Navegador incompatível com esse recurso");
}
document.write(coordenadas); //Aqui eu NÃO consigo pegar o valor
</script>
Basicamente eu quero salvar os valores de Latitude, Longitude e Timestamp em variáveis para poder usa-las posteriormente. Conto com a vossa ajuda.
Obrigado.wanderval gostaria de agradecer sua ajuda, mas reforço que não tenho muita experiência com JavaScript.
Você poderia por favor me dizer como recuperar esses valores gravados no console, pelas pesquisas que fiz não há como. E caso não haja maneira, como eu posso gravar as coordenadas numa variável? Vou precisar dessas informações em outra parte do script.
Se você testou o código que eu postei, deve ter percebido que a variável apesar de ser global não estava refletindo as coordenadas.
PS.: eu havia tentado também enviar esses dados através do "return" também sem sucesso.
Obrigado.
O problema que você está tendo e que está tratando o getLocation como um código syncrono mas ele é asyncrono, isso quer dizer que a sua logica nao vai seguir uma ordem de execução por linha, por esse motivo seu document.write mostra undefined ele executa primeiro que a função.
Resumindo mesmo que você check o valor no metodo de "sucesso" e naquele momento que existe o valor, mas seu write na ultima linha executou antes disso então nunca terá o valor, seu conceito de variavel global pode ser feito mas precisa executar somente apos o valor for retornado, se você testar o codigo que coloquei a variavel se manteve mas so chamei o metodo apos o valor ser retornado 'simples coloque os console.log e vai ver a ordem que está ocorrendo a execução.
No caso do seu problema apenas utilize o restante da sua logica em metodos assim chamara apenas quando o valor for retornado, viu que coloquei um metodo chamado "manipulaCoord", ele está imprimindo 2 variáveis a que esta sendo enviada por parametro e a variavel de scopo global "coordenadas"
function manipulaCoord(coord) {
console.log('manipulaCord:', coord, coordenadas);
}
coordenadas = ""; //Defini essa variável segundo meus conhecimentos, por ter omitido a palavra 'var' ela é global
function getCurrentLocation(callback) {
if(!navigator.geolocation) return;
navigator.geolocation.getCurrentPosition(function(position) {
var currLocation = { lat: position.coords.latitude, long: position.coords.longitude };
callback(currLocation);
});
}
getCurrentLocation(function(currLocMap){
coordenadas = currLocMap;
console.log('valor aqui', coordenadas);
// chama o metodo para executar o restante do código
algumMetodo();
});
function algumMetodo() {
console.log('algumMetodo: ', coordenadas);
}Obrigado pelos esclarecimentos. Entendi os códigos que você postou, fiz algumas alterações e resolvi meu problema.