Entradas

Google Maps API y el geoposicionamiento

Luego de salir del II congreso de Webmasters una de las csas más interesantes que se me ocurrió fue el de utilizar el API de Google Maps para incluirle en mi proyecto de cine y dió como resultado ¿donde se rodó mi película favorita? . Es muy sencillo de utilizar el API do google y sobre todo la cantidad de documentación al respecto aunque puede ser un poco lioso al principio, por ello se deben seguir unos pequeños pasos: Tener las direcciones que queremos localizar (no son necesarias las coordenadas pues se encarga el de traducirlas con javascript a coordenadas) En caso de tener muchas direcciones lo bueno es crear un archivo kml (un tipo de archivo XML con estructura especifica para geocoding) Lo malo de esto es que como no tengas las coordenadas tienes que hacerlo con google y aunque el mismo te proporciona el código para hacerlo ( enlace ) tienes sus limitaciones en una cuenta gratuita more than 15,000 geocode requests in a 24 hour period are received from a single IP address, ...

Por qué Google lo da casi todo gratis?

Es una pregunta interesante y me ha surgido a raiz del II Congreso de Webmasters, sé que este blog estaba pensado más para scripts y cosas de programación pero al final he decidido comentar de todo un poco lo que encuentre así que volviendo al grano. Hay multitud de servicios que ha google le ha costado una pasta adquirir y que aún no se le ven ventajas reales o viables económicamente según el modelo actual de negocio, servicios como maps, digitalización de contenidos como los de la revista Life, códigos públicos, street view, etc. Todos estos actualmente están disponibles de forma gratuita para cualquiera y mi pregunta es ¿por qué? Realmente no creo que Google sea un alma caritativa y me doy cuanta del poder en información que realmente maneja esta empresa, no soy un paranoico que creo que nos van a dominar, pero si realmente creo que al paso que van diversificándose con satélites de alta resolución tal vez para futuros proyectos GPS, plataformas de SO para móviles - sin lugar a dudas...

Tratamiento de respuestas xml con ajax

Bien veamos como tratar elementos que recibimos de respuesta como XML al ejecutar AJAX, para ello existen varios métodos del objeto XMLHttpRequest, veamos en un ejemplo: // obtenemos el tag con el nombre deseado xmlhttp.responseXML.getElementsByTagName('nombre_tag') // obtenemos la cantidad de tags con este nombre xmlhttp.responseXML.getElementsByTagName('nombre_tag').length // sacamos el objeto del tag i de este nombre xmlhttp.responseXML.getElementsByTagName('nombre_tag').item(i).firstChild // el valor de este elemento xmlhttp.responseXML.getElementsByTagName('nombre_tag').item(i).firstChild.data Con estos valores podremos recorrer el archivo XML y realizar cualquier roceso con los datos que recibamos, asignarlo a valores de formularios, ssacarlos en pantalla, etc, etc.

Error con la codificación de la respuesta

algo que me trajo de cabeza era un error con una respuesta generada al llamar a un documento en el server que ejecutaba un script para crear un archivo XML y es que aunque definas el archivo XML como: $xml_response = new XmlWriter(); $xml_response->openMemory(); $xml_response->startDocument('1.0', 'ISO-8859-1'); o sea defines que es codificación ISO-8859-1, para internet explorer esto no importa, con firefox si funciona pero explorer ni caso y es que hay que definir además el header de esta respuesta, o sea que la primera línea del código de esta url que queremos ejectar del lado del servidor tiene que ser: header("Content-Type: text/xml; charset=ISO-8859-1"); y es que si no te darían errores como (aclaro que el problema es IE como siempre): IE error: Automation server can't create object - JavaScript

Método onreadystatechange del objeto XMLHttpRequest

Con este método lo que hacemos es tratar la respuesta recibida por parte del servidor, ¿Cómo sabemos cuando se ha ejecutado correctamente? Para ello utilizamos: ajaxNEW.readyState Este devolverá los siguientes valores: 0 - Sin inicializar 1 - Abierto (acaba de llamar open) 2 - Enviado 3 - Recibiendo 4 - A punto por ejemplo: ajaxNEW.onreadystatechange=function() { if (ajaxNEW.readyState==4) // pongo la rspuesta tal y como la recibo dentro del contenedor // la propiedad responseText me devuelve la respuesta tal y como se genera en el server. contenedorLugar.innerHTML = ajaxNEW.responseText; } Si ademas queremos compreobar que se ejecutó correctamente la página una vez llegado as readyState == 4 nos bastaría con hacer otra comprobación: if (xmlhttp.readyState==4) { if (xmlhttp.status==200) alert("URL Exists!") else if (xmlhttp.status==404) alert("URL doesn't exist!") else alert("Status is "+xmlhttp.status) } La propiedad status almacena...

Método open del objeto XMLHttpRequest

Una vez que ya hemos creado el objeto XMLHttpRequest (ver entrada anterior) entonces podemos realizar las llamadas al servidor sin necesidad de recargar la página al completo. estas llamadas se hacen a través de la función open y tiene los siguientes parámetros: ajaxNEW=makeAJAX(); ajaxNEW.open("GET",url,true); el primer parámetro es el tipo de llamada y puede ser GET, POST o HEAD, luego veremos cada uno en detalle. el segundo es la url que vamos a ejecutar y de la cual obtendremos la respuesta. el tercero es si queremos hacerlo de forma asíncrona o no, generalmente es TRUE para que así no se recargue la página. esta función tiene otros 2 parámetros para el acceso de páginas restringidas por usuario y contraseña pero nunca los he utilizado, los parámetros serían : usuario y password. veamos ahora las distintas llamadas al método open. GET Esta función carga la respuesta generada de ejecutar la url en el div contenedor: function carga(contenedor,url){ var contenedorLugar; ...

Código para crear un objeto XMLHttpRequest

function makeAJAX() { var xmlhttp=false; // Entre estos ids podemos obviar comodamente // la versión Msxml2.XMLHTTP.7.0 var ids = ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, // we can cope with old IE versions. // and security blocked creation of the objects. for(var i=0; !xmlhttp && i try { xmlhttp = new ActiveXObject(ids[i]); } catch(ex) { xmlhttp = false; } } @end @*/ if (!xmlhttp && typeof XMLHttpRequest!='undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } } /* * Esta condición es realmente obsoleta pues * actualmente todos los navegadores modernos * ya vienen con compatibilidad inn...