Foros del Web » Programando para Internet » ASP Clásico »

Ayuda con ASP + JS + Google Map

Estas en el tema de Ayuda con ASP + JS + Google Map en el foro de ASP Clásico en Foros del Web. Hola de nuevo. He creado un pagina que me posiciona unos hoteles en el mapa creando pues sus etiquetas y demas. La informacion la recoge ...
  #1 (permalink)  
Antiguo 12/11/2008, 09:53
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 16 años, 10 meses
Puntos: 0
Ayuda con ASP + JS + Google Map

Hola de nuevo.

He creado un pagina que me posiciona unos hoteles en el mapa creando pues sus etiquetas y demas.
La informacion la recoge de un XML Generado en la misma pagina.
El problema que tengo es que hay veces que funciona bien con IE y con Firefox; otras veces no funciona con ninguno... Hay ciudades que me lo muestra todo perfectamente...
Estoy revisando el codigo por si puede haber algo que se me escape, pero ya no veo nada.
Os paso el codigo por si alguien ve algun problema

Código:
		
	<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> 
	
	<% Response.Buffer=True %>  
	
 	<!--#include file="inc/declareVariables.asp"-->
 	<!--#include file="inc/strRoomGroup.asp"-->
	<!--#include file="inc/routines.asp" -->
    
	<%  Call buildCityRequestString %>		
	
	<%session("loc")=request.form("city")%>	
	
	<!--#include file="inc/xmlPointer.asp" -->
    
	<!--#include file="inc/xmlDebugString.asp" -->
  

	<%     	 
			Set xsl = Server.CreateObject("MSXML2.FreeThreadedDOMDocument.3.0")
			xsl.async = false		'lets you do other tasks while the xml is loading
 	    	xsl.load (Server.MapPath("xsl/hotelAvailability.xsl"))
 	    	
			Set template = Server.CreateObject("MSXML2.XSLTemplate")
				template.stylesheet = xsl
			set processor = template.createProcessor()
				processor.input = xml
				
         
         'response.Write(xml.xml)
     
        'El primer valor de variables es el numero de posicion del hotel en la pagina (1-20)
        '<hotelId>229448</hotelId>
        '<name>Hotel Las Arenas Balneario Resort</name>
        '<address1>C/Eugenia Viñes, 22 -24</address1>
        '<city>VALENCIA</city>
        '<latitude>39.46568</latitude>
        '<longitude>-0.32485</longitude>
        '<postalCode>46001</postalCode>
        
        
        tam= xml.getElementsByTagName("Hotel").length
        %>
        
        
        <script type="text/javascript">//RECOJO DATOS EN ASP QUE LUEGO ALMACENO EN ARRAYS JAVASCRIPT
        var x;
        var i;
        var vhotelId = new Array();
        var vname = new Array();
        var vaddress1 = new Array();
        var vcity = new Array();
        var vlatitude = new Array();
        var vlongitude = new Array();
        var vpostalCode = new Array();
        var vthumbNailUrl = new Array();
        var vcountry = new Array();
        var vdisplayCurrencyCode = new Array();
        var vdisplayRoomRate = new Array();
        var arrayTemporal = new Array();
        var vshortDescription = new Array();
        
        </script> <%
        'response.Write(tam)
        dim i,j
        'ON ERROR RESUME NEXT se encarga de comprobar si hay algun error. Si lo hay lo ignora y sigue con la ejecucion
        'LO UTILIZO PORQUE DE ESTA FORMA EVITO UNOS ERRORES QUE CON ELLOS NO ME CARGARIA LA PAGINA
        'DE ESTA FORMA SI ME LA CARGA BIEN NORMALMENTE
        for i=0 to tam - 1
         ON ERROR RESUME NEXT
            hotelId=xml.getElementsByTagName("Hotel/hotelId")(i).firstChild.data
         IF ERR.DESCRIPTION <> "" THEN
            hotelId=""
         END IF
         ON ERROR RESUME NEXT
            name=xml.getElementsByTagName("Hotel/name")(i).firstChild.data
         IF ERR.DESCRIPTION <> "" THEN
            name=""
         END IF
         
         ON ERROR RESUME NEXT
            address1=xml.getElementsByTagName("Hotel/address1")(i).firstChild.data
         IF ERR.DESCRIPTION <> "" THEN
            address1=""
         END IF
         
         ON ERROR RESUME NEXT
            city=xml.getElementsByTagName("Hotel/city")(i).firstChild.data
            'AQUI COMPARO LA PRIMERA CIUDAD DEL XML CON LA QUE TENGO ALMACENADA Y LE ASIGNA EL VALOR EN EL CASO DE DISTINTAS
            if session("loc") <> city AND i=0 then
            session("loc")=city
            end if
         IF ERR.DESCRIPTION <> "" THEN
            city=""
         END IF
         
         ON ERROR RESUME NEXT
            latitude=xml.getElementsByTagName("Hotel/latitude")(i).firstChild.data
         IF ERR.DESCRIPTION <> "" THEN
            latitude=""
         END IF
         
         ON ERROR RESUME NEXT
            longitude=xml.getElementsByTagName("Hotel/longitude")(i).firstChild.data
         IF ERR.DESCRIPTION <> "" THEN
            longitude=""
         END IF
         
         ON ERROR RESUME NEXT
            postalCode=xml.getElementsByTagName("Hotel/postalCode")(i).firstChild.data 
         IF ERR.DESCRIPTION <> "" THEN
            postalCode = ""
         END IF
        ON ERROR RESUME NEXT
                thumbNailUrl="http://images.travelnow.com" & xml.getElementsByTagName("Hotel/thumbNailUrl")(i).firstChild.data
        IF ERR.DESCRIPTION <> "" THEN
                thumbNailUrl = ""
        END IF
        ON ERROR RESUME NEXT
                country=xml.getElementsByTagName("Hotel/country")(i).firstChild.data
                session("PAISINGLES") = country
        IF ERR.DESCRIPTION <> "" THEN
                country=""    
        END IF
        ON ERROR RESUME NEXT
                displayCurrencyCode=xml.getElementsByTagName("Hotel/HotelProperty/RateInfo/displayCurrencyCode")(i).firstChild.data
        IF ERR.DESCRIPTION <> "" THEN
                displayCurrencyCode=""
        END IF
        ON ERROR RESUME NEXT
                displayRoomRate=xml.getElementsByTagName("Hotel/HotelProperty/RateInfo/displayRoomRate")(i).firstChild.data
        IF ERR.DESCRIPTION <> "" THEN
                displayRoomRate=""
        END IF
        ON ERROR RESUME NEXT
                shortDescription= xml.getElementsByTagName("Hotel/shortDescription")(i).firstChild.data 
        IF ERR.DESCRIPTION <> "" THEN
                shortDescription=""
        END IF
         
         %>
         <script type="text/javascript">
         x = '<%=i %>';
         vhotelId[x] = '<%=hotelId %>';
         vname[x] = '<%=name %>';
         vaddress1[x] = '<%=address1 %>';
         vcity[x] = '<%=city %>';
         vlatitude[x] = '<%=latitude %>';
         vlongitude[x] = '<%=longitude %>';
         vpostalCode[x] = '<%=postalCode %>';
         vthumbNailUrl[x] = '<%=thumbNailUrl %>';
         vcountry[x] = '<%=country %>';
         vdisplayCurrencyCode[x] = '<%=displayCurrencyCode %>';
         vdisplayRoomRate[x] = '<%=displayRoomRate %>';
         vshortDescription[x] = '<%=shortDescription %>';
         
         
//         document.write(x + "--> ");
//         document.write(vhotelId[x]);
//         document.write(vname[x]);
//         document.write("<br />");
//         document.write(vaddress1[x]);
//         document.write(vcity[x]);
//         document.write(vlatitude[x]);
//         document.write(vlongitude[x]);
//         document.write("<br />");
//         document.write(vpostalCode[x]);      
//         document.write("<br />");
//         document.write(vthumbNailUrl[x]);      
//         document.write("<br />");
         
         </script>
         <%next%>
         <!--#include file="inc/xslParamHotels.asp"-->

Creo que es un troncho bastante largo,pero a ver si hay alguien que controle un poco el tema y ve algo que se me escape a mi.


PD: Tengo que partir el codigo en 2 partes porque es demasiado largo y no me deja enviarlo
  #2 (permalink)  
Antiguo 12/11/2008, 09:54
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Ayuda con ASP + JS + Google Map

Aqui esta la segunda parte del codigo.
Gracias


Código:
<%''''''''''''ACABA GENERAR LAS VARIABLES ASP Y ALMACENARLAS EN ARRAYS JAVASCRIPT
			
			processor.transform()
			Response.Write (processor.output)
		
		   Set xsl = Nothing
		   Set template = Nothing
		   
 	
 	   Set xml = Nothing
	   Set xmlhttp = Nothing
        
 	
	%>	
	
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAp0OgPT_W9i4urqiTE4UqNhTq1E0NgXqvizwUvavWEHJh9y-27BRIzVwy9m8JgTQbm9EpBHk56r215A" type="text/javascript"></script>

<script type="text/javascript">
			//google.load("maps", "2");
			var map = null;
			//var puntosCoordenadas = "";
			//var puntosDireccion = "";
			var geocoder = null;
            var tam;
            var i;
            
            //var direccionesNoEncontradas = "";
            //POSICIONO EL MAPA SEGUN LAS VARIABLES QUE LE PASO
			var centro = '<%=(Session("loc") & ", " & Session("PAISINGLES"))%>';
			//alert('<%=(Session("loc") & ", " & Session("PAISINGLES"))%>');

			function initializeAll() {
				initializeMap();
                
				for (var i = 0; i < x ; i += 1) {
				
				if ((vlongitude != "" && vlatitude != "") && (vlongitude != null && vlatitude != null)){
				    //AQUI ES DONDE AÑADO LAS MARCAS
				    anadeMarcadorCoordenadas(vlongitude[i],vlatitude[i],vaddress1[i],vcity[i],vname[i],vhotelId[i],vthumbNailUrl[i],i,vdisplayCurrencyCode[i],vdisplayRoomRate[i],vcountry[i],vpostalCode[i],vshortDescription[i]);
				    
				    }
				    else{
				    anadeMarcadorDireccion();
				    }
				}//FIN FOR
				
				//alert(direccionesNoEncontradas);
			}//FIN DE function initializeAll()
			
			//google.setOnLoadCallback(initializeAll);
			// Call this function when the page has been loaded
			function initializeMap() {
			
			         
			
			
				map = new GMap2(document.getElementById("map"));
				geocoder = new GClientGeocoder(); // para buscar por dirección
				map.addControl(new GSmallMapControl()); // controles para zoom, mover
				map.addControl(new GMapTypeControl()); // controles para mapa, satélite, híbrido
				
				
				
				
				if (centro == "") {
					map.setCenter(new GLatLng(39.926588, -3.164062), 6); // centro del mapa (longitud, latitud, zoom)
				} else {
					geocoder.getLatLng(centro, function(point) {
						if (!point) {
							map.setCenter(new GLatLng(39.926588, -3.164062), 6);
							alert("no tenemos punto");
						} else {
							map.setCenter(point, 12);
							// alert(point);        mostramos las coordenadas
						}
					});
				}
				
				//alert('Recuerde que solo se muestran los anuncios con coordenadas o con una dirección correcta.');
			}//FIN function initializeMap()
			
 			function anadeMarcadorCoordenadas(vlongitude, vlatitude, vaddress1, vcity, vname, vhotelId,vthumbNailUrl,i,vdisplayCurrencyCode,vdisplayRoomRate,vcountry,vpostalCode,vshortDescription) {
                //ESTE ALERT NO LO QUITO PORQUE SINO NO ME AÑADE LAS MARCAS
 				if (i == 0) { alert("www.MIPAGINA.com"); }

 			    //alert(vlongitude + '/' + vlatitude + '/' + vaddress1 + '/' + vcity + '/' + vname + '/' + vhotelId);	
 				var point = new GLatLng(vlatitude ,vlongitude);
 				var marker = new GMarker(point);
 				//var icono = new GIcon(G_DEFAULT_ICON, 'http://www.casaspain.com/idiomas/bandera_francia.gif');
 				//var marker = new GMarker(point, icono);
 				GEvent.addListener(marker, "click", function() {
 				    //AQUI GENERO LAS ETIQUETAS
 					var content = "<div style='width:25em'><font face='Courier new,Courier,monospace' color='#CC6633' size='1'>";
 					content += "<table cellpadding='0' cellspacing='0'><tr><td colspan='2'>";
 					content +='<span style="font-size:24px;font-weight:bold;"><a href="javascript:pulsarboton('+ vhotelId +');">' + vname + '</a><span>';
 					content +="</td></tr><tr><td>";
 					content +='<img src=' + vthumbNailUrl + ' />';
 					content +="</td><td>";
 					content +="<h4>" + vaddress1 + "<br/> " + vcity + ",<br/>"+ vpostalCode + ", " + vcountry + "</h4><h5>Precio final: "+ vdisplayRoomRate + vdisplayCurrencyCode +"</h5>";
 					content +="</td></tr><tr><td colspan='2'>";
                    content +='<h5>'+ String(vshortDescription).substring(0,252); +'</h5>'; // mostramos el precio total
                    content +="</td></tr></table>";
                    content += "</font></div>";
 					marker.openInfoWindowHtml(content);
				});
				map.addOverlay(marker);
				

			}//FIN function anadeMarcadorCoordenadas()
			
			//A TRAVES DE ESTE CODIGO NO LE PASO NADA DE INFORMACION DE MOMENTO
			function anadeMarcadorDireccion() {
			if (i == 0) { alert("WWW.MIPAGINA.com"); }
				if (geocoder) {
					geocoder.getLatLng(vcity + ', ' + vaddress1, function(point) {
						if (!point) {
							geocoder.getLatLng(vcity, function(point) {
								if (!point) {
									//alert(direccion + ', ' + provincia + " no encontrada");
									//direccionesNoEncontradas += direccion + ', ' + provincia;
								} else {
									var marker = new GMarker(point);
									//var icono = new GIcon(G_DEFAULT_ICON, 'http://www.OTRAPAGINA.com/idiomas/bandera_espana.gif');
									//var marker = new GMarker(point, icono);
									map.addOverlay(marker);
									GEvent.addListener(marker, "click", function() {
										var content = "<div style='width:25em'><font face='Courier new,Courier,monospace' color='#CC6633' size='1'>";
 					                    content += "<table cellpadding='0' cellspacing='0'><tr><td colspan='2'>";
 					                    content +='<span style="font-size:24px;font-weight:bold;"><a href="javascript:pulsarboton('+ vhotelId +');">' + vname + '</a><span>';
 					                    content +="</td></tr><tr><td>";
 					                    content +='<img src=' + vthumbNailUrl + ' />';
 					                    content +="</td><td>";
 					                    content +="<h4>" + vaddress1 + "<br/> " + vcity + ",<br/>"+ vpostalCode + ", " + vcountry + "</h4>";
 					                    content +="</td></tr><tr><td colspan='2'>";
                                        content +='<br/><h4>Total de la Estancia: '+ vdisplayRoomRate + vdisplayCurrencyCode +'</h4>'; // mostramos el precio total
                                        content +="</td></tr></table>";
                                        content += "</font></div>";
										marker.openInfoWindowHtml(content);
									});
									map.addOverlay(marker);
								}
							});
						} else {
							var icono = new GIcon(G_DEFAULT_ICON, 'http://www.OTRAPAGINA.com/idiomas/bandera_alemania.gif');
							var marker = new GMarker(point);
							map.addOverlay(marker);
							GEvent.addListener(marker, "click", function() {
								var content = "<div style='width:20em'><font face='Courier New, Courier, monospace' color='#CC6633' size='-1'>";
								//content += marker.getPoint().lat() + " / " + marker.getPoint().lng(); // mostramos las coordenadas
								content += "<h1>" + vname + "</h1>";
								content += "<br />" + vaddress1 + ', ' + vcity;
//								if (URL != '') {
//									content += "<br /><br /><a href='" + URL + "' target='_blank'>" + URL + "</a>";
//								}
								content += "<br /></font></div>";
								marker.openInfoWindowHtml(content);
							});
							map.addOverlay(marker);
						}
					});
				}
			}
			
			
			
			///////// ESTA FUNCION LLAMA AL BOTON CORRESPONDIENTE AL HOTEL SELECCIONADO DESDE EL GOOGLE MAP
			function pulsarboton (boton){
			var pulsa = document.getElementById(boton);
                if (pulsa){
                        pulsa.click();   
                        }
			
			}
		</script>


<%Session.Contents.RemoveAll() %>
  #3 (permalink)  
Antiguo 12/11/2008, 10:05
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Ayuda con ASP + JS + Google Map

checa los caracteres que viene en el XML
es posible que una ciudad venga con acento o con una Ñ.
en ese caso el XML se va a caer si es que no le aplicas el ENCODING correcto.


para dar soporte al lenguaje castellano y sus caracteres especiales , los XML deberian verse asi

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<reg><item> ...
  #4 (permalink)  
Antiguo 12/11/2008, 10:11
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Ayuda con ASP + JS + Google Map

Cita:
Iniciado por Muzztein Ver Mensaje
checa los caracteres que viene en el XML
es posible que una ciudad venga con acento o con una Ñ.
en ese caso el XML se va a caer si es que no le aplicas el ENCODING correcto.


para dar soporte al lenguaje castellano y sus caracteres especiales , los XML deberian verse asi

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<reg><item> ...
En Firefox se ve todo correctamente, pero en IE no funciona lo que me comentas, por lo que a la hora de recibir el XML en otro archivo ASP le quito Ñ y las sustituyo por N , de la misma forma que hago con otros caracteres especiales que no me aparecen en IE. Utilizo Replace para ello.
Asi que el codigo que recibo no lleva ningun caracter especial
  #5 (permalink)  
Antiguo 12/11/2008, 11:27
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Ayuda con ASP + JS + Google Map

Antes se me ha olvidado decir que error me da.
El error que me da en IE es " 'this.M' es nulo o no es un objeto "


En Firefox todo funciona bien parece.
  #6 (permalink)  
Antiguo 12/11/2008, 11:44
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Ayuda con ASP + JS + Google Map

ojo que los acentos tb son caracteres especiales.


¿que encoding tienes declarado en el XML?


EDIT:aps.. es un error de referencia entonces.

cual es el objeto M ?

en que parte del codigo esta?
  #7 (permalink)  
Antiguo 13/11/2008, 07:59
 
Fecha de Ingreso: junio-2008
Mensajes: 21
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Ayuda con ASP + JS + Google Map

Ya he detectado el problema Muzztein.

Lo tengo en menu.asp, que es donde hago la seleccion del pais y la ciudad donde quiero buscar hoteles.
Tengo diferentes select y diferentes input, pero tengo el problema en el input "idpais", el cual al cargar la pagina le paso por la querystring el pais como mensaje a mostrar y el codigo del pais como value.
Código:
<select name="country" style="width: 160px; font-weight: bold;" id="idpais"> <option value="<%=session("codpais")%>" SELECTED ><%=session("PAISINGLES")%> <!--#include file="inc/countries.asp" --> </select>
Bien, el error del "this.M" viene porque al pasarle el valor pais y el valor ciudad, ya no es necesario rellenar nada en el menu, por lo que solo es necesario darle a buscar. De esta forma al darle a buscar sin nisiquiera pinchar sobre el select de los paises, debe de haber algun valor que no rellene y es cuando me da el error.

Si yo, al cargar la pagina, pincho sobre el select y dejo seleccionado el mismo pais o selecciono otro (da igual), ya me funciona bien el google map, rellenandome correctamente todo.

He utilizado una funcion que se activa en el onLoad del body para que me haga un click sobre el select con id="idpais".
El problema es que esto no me soluciona el problema. Deberia de abrir el menu y volver a cerrarlo para que esto me funcionase.
Código:
function pulsarboton (boton){
			var pulsa = document.getElementById(boton);
                if (pulsa){
                        pulsa.click();
						alert("pulsado el boton " + boton);
                        pulsa.click();   
                        }
			}
	</script>
Asi que estoy con el problema detectado y haciendo pruebas, que no es poco jejeje.

Gracias por la ayuda
HooK69
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:24.