JavaScript - pequeña ayuda

   
Vista:

pequeña ayuda

Publicado por santiago (4 intervenciones) el 28/01/2015 18:50:33
Hola, necesito un poco de ayuda con esto..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8">
<script src="js/jquery-1.5.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(e) {
	 lat='0';
	 lng='0';
 
	 function  localizarPosicion(){
        if (navigator.geolocation) {
            function errorLocalizandoPos(err) {alert('ERROR(' + err.code + '): ' + err.message); return false; };
			function showPosition(position){lat= position.coords.latitude; lng = position.coords.longitude; return true;};
            navigator.geolocation.getCurrentPosition(showPosition,errorLocalizandoPos);
        } else {
            alert("Geoposicion no es soportada.");
        }// end if
    }// end localizarPosicion
 
	var x=false;
	do{	x=localizarPosicion(); } while (x==true);
	alert (x);
 
});//fin
</script>
</head><body></body></html>

Me di cuenta que no me da la localización a la primera vez, pero las sucesivas si, por eso hice un bucle para que repitiera la función hasta que esta devuelve 'true' pero al hacer un 'alert(x)' siempre me devuelve 'false' aunque la funcion haya terminado correctamente y de las coordenadas.
Creo que deveria de ejecutarse linea a linea, pero parece que ejecuta la funcion y sigue leyendo codigo aun sin haberla terminado.
Aunque tengo nociones de programación con otros lenguajes, JS me está dando mucho dolor de cabeza.

¿Alguien me puede iluminar un poco y decirme si lo estoy haciendo bien o como se hace para que se ejecute en orden?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

pequeña ayuda

Publicado por Yamil Bracho (11 intervenciones) el 28/01/2015 19:03:54
Primero lo primero. En el loop inicializas x= false y luego hace el ciclo mientras x==true, es decir la primera vez se va a salir de una vez Debs cambiar la condicion a x== false, pero ten cuidado porque mientra que la funcion que llamas en el loop no camie el valor de x te puedes quedar en un ciclo inifito.
Lo otro qu epuedes hacer mientras tratas de determinar la posicion es mostrar un relojito o algun idnicador de que se esta haciendo un proceso que toma tiempo...

Para lo de Geolocalizacion echale un vistazo a http://www.w3schools.com/html/html5_geolocation.asp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

pequeña ayuda

Publicado por santiago (4 intervenciones) el 28/01/2015 19:10:36
Tampoco me funciona, y mira que he tenido cuidado en no hacer un bucle infinito.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8">
<script src="js/jquery-1.5.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(e) {
	 lat='0';
	 lng='0';
 
	 function  localizarPosicion(){
        if (navigator.geolocation) {
            function errorLocalizandoPos(err) {alert('ERROR(' + err.code + '): ' + err.message); return false; };
			function showPosition(position){lat= position.coords.latitude; lng = position.coords.longitude; return true;};
            navigator.geolocation.getCurrentPosition(showPosition,errorLocalizandoPos);
        } else {
            alert("Geoposicion no es soportada.");
        }// end if
    }// end localizarPosicion
 
	x=localizarPosicion();
	alert (lat);
 
});//fin
</script>
</head><body></body></html>

Cuando cargo la página aparece el mensaje dando como resultado 0.
Alguna otra forma u idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de txema

pequeña ayuda

Publicado por txema (16 intervenciones) el 28/01/2015 19:30:49
Hace pocos días que publicaba el código de página completa en esta web. Está suficientemente comentado

http://www.lawebdelprogramador.com/codigo/JavaScript/3007-Geolocalizacion-basada-en-W3C.html

Verás que hay algunas cosas que no consideras y son interesantes a partir del código básico y perfecto de w3schools. Lo que muestro en la variable PositionOptions o el atributo enableHighAccurace que te han de ayudar en una geolocalización más precisa.

Está en JavaSript pero es fácilmente ajustable a JQuery.

Hay muchos más datos que los puedes obviar.

Nos cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

pequeña ayuda

Publicado por santiago (4 intervenciones) el 28/01/2015 21:41:00
He leido el codigo de W3C y buscado muchos ejemplos, pero no han resuelto mi problema.

Si ejecutas el codigo que he puesto en el segundo comentario, verás que hay una variable 'lat=0' que recoge el valor de la latitud cuando hago la llamada a .getCurrentPosition y al terminar la función me devuelve un mensaje con el nuevo valor de la vaiable 'lat'; pero esta sigue siendo =0. Es como si la ejecución del codigo no esperara a que finalizara la funcion que obtiene las coordenadas y siguiera ejecutando lineas.

¿Como hago para que no siga ejecutando lineas mientras no termine la funcion?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de txema

pequeña ayuda

Publicado por txema (16 intervenciones) el 28/01/2015 22:25:22
Vamos a ver.

He tratado de corregir tu código porque ya de entrada veía errores.
Pensaba yo (y pensaba mal) que tú analizarías el código de w3schools y el que te mostraba (que más que mío es de W3C)

Te paso tu código con las correcciones y comentarios de la razón de los cambios
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE HTML>
<html>
 
<head>
    <meta charset="utf-8">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        var lat, lng; // Las variables las declaro sin necesidad de darles valor alguno
        function localizarPosicion() { // sobre la "e" en  localizarPosicion(e)
                if (navigator.geolocation) {
                    navigator.geolocation.getCurrentPosition(showPosition, errorLocalizandoPos);
                } else {
                    alert("Geoposicion no es soportada.");
                }  //Es necerario cerrar ya el if, puesto que navigator.geolocation ... llama a las funciones de localización y error.
 
                function errorLocalizandoPos(err) {
                    alert('ERROR(' + err.code + '): ' + err.message);
                    return false;
                };
 
                function showPosition(position) {
                    lat = position.coords.latitude;
                    lng = position.coords.longitude;
                    alert(lat);  // Los alert los lanzo aquí porque fuera de la función son indefinidos ("undefined)
                    alert(lng);
                }; // end if
            } // end localizarPosicion
        localizarPosicion(); // Al final hago la llamada a localizarPosicion()
		// el valor x en x=localizarPosicion(); no me lleva a ningiuna parte
    }); //fin
    </script>
</head>
 
<body>
</body>
 
</html>

Y te daba con alert(lat); valor 0 porque era era el valor que le asignabas tú tú inicialmente.

Coméntanos

Edito: llamabas a la función localizarPosicion(); antes del alert, por lo que el valor siempre sería el declarado inicialmente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar