Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/12/2010, 12:40
nessemar
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Detener la ejecución del código.

Hola, os escribo por exponeros el siguiente problema y ver si me podeis indicar una posible solución:

-estoy desarrollando una aplicación en Google Maps (usaré el término Gmaps a partir de ahora). Uno de mis scripts fcrea_waypoint.js) reciben un vector de direcciones, y construyen un objeto Marker para cada una de las direcciones pasadas.

-Pero dado que el objeto Marker exige como parámetro obligatorio un objeto LatLong tengo que realizar una llamada a la función fGeocodifica.js. La cual recibe la dirección como Parámetro, la Geocodifica y la devuelve como objeto LatLong.

-El siguiente paso sería asignarle el objeto LatLong a las propiedades del Marker y "lanzarlo" al mapa. Pero el código no funciona; a mi parecer es esto debido a:

-Tengo dos alerts, el primero al final de la función crea_waypoint y que debería ser el último en ejecutarse y otro dentro de la función Geocodifica, que debería ejecutarse (o eso creía) al recibir la respuesta de la Geocodificación y siempre antes de finalizar la función crea_waypoint. Pues esto no ocurre así, y es el alert de la función Geocodifica el que me llega al final.

-Mi impresión (puede que equivocada) es que el código (supongo que por correr del lado servidor) va mas rápido que la respuesta del servidor de Google y la Geocodificación llega tarde, por lo que mi navegador no asigna una posición correcta al Marker, y no se ejecuta correctamente.

Mi pregunta es: Suponiendo que la fuente de el error sea la que yo pienso ¿como puedo decirle al código de javascript que se detenga y no haga nada hasta recibir respuesta de la función Geocodifica?. Claro que puedo estar equivocado y que el origen del error sea otro, en cuyo caso agradecería que si veis algo en lo que yo no haya caido me lo digais.

Os pongo ambas funciones

fcrea_waypoints.js
Código:
function crea_waypoints(vector){
   var i=0;
   var contentString;
   var coord;
   var infowindow;
   var myLatlng;
   var marker;
   for (i=0;i<=vector.length-1;i++){
      contentString='<div id="content">'+
      '<div id="siteNotice"></div>'+
      '<h3 id="firstHeading" class="firstHeading"><CENTER>BLAH, BLAH, BLAH </CENTER></h3>'+
      '<div id="bodyContent">'+
      '<HR>'+
      '<p><CENTER>blah, blah, blah, blah, blah, blah...</CENTER></p>'+
      '</div>'+
      '</div>';
      infowindow = new google.maps.InfoWindow({
         content: contentString
      });
      myLatlng=Geocodifica(vector[i]);
      marker = new google.maps.Marker({
         position: myLatlng,
         map: map,
         title: 'Sustituir donde proceda'
      });
      infowindow.open(map,marker);
      alert("Debería salir al final");
   }
}

fGeocodica.js
Código:
function Geocodifica(parametro){
   alert("Geocodificamos");
   var geocoder;
   geocoder = new google.maps.Geocoder();
   geocoder.geocode( { 'address': parametro}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
         parametro=results[0].geometry.location.lat()+", "+results[0].geometry.location.lng();
         alert ("Dirección Geocodificada: "+parametro);
      }
      else{
         alert ("Google no encuentra la dirección. Asegurate que esta ha sido bien introducida")
      }
   });
   return parametro;
}
Esta será la segunda ocasión en la que me echais un cable, así que nuevamente muchas gracias por vuestro tiempo.