<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>moure.es - Alfonso Moure Ortega &#187; json</title>
	<atom:link href="http://www.moure.es/tag/json/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.moure.es</link>
	<description>innovation is the rule, not the exception</description>
	<lastBuildDate>Thu, 11 Aug 2011 10:07:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Geocodificar una dirección postal con los servicios de Google</title>
		<link>http://www.moure.es/2009/06/geocodificar-una-direccion-postal-con-los-servicios-de-google/</link>
		<comments>http://www.moure.es/2009/06/geocodificar-una-direccion-postal-con-los-servicios-de-google/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 21:01:03 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[gdata]]></category>
		<category><![CDATA[geocodificación]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=165</guid>
		<description><![CDATA[Es un tema archiconocido y muy usado hoy en día, y por si fuera poco, hipersimple: conseguir las coordenadas de una ubicación por su nombre o mediante una dirección postal. ¿Desde dónde? Pues bueno, hay muchos servicios que ofrecen este tipo de trabajo: desde Geonames (un proyecto increible que recoge coordenadas e información geográfica e [...]]]></description>
			<content:encoded><![CDATA[<p>Es un tema archiconocido y muy usado hoy en día, y por si fuera poco, hipersimple: conseguir las coordenadas de una ubicación por su nombre o mediante una dirección postal. ¿Desde dónde? Pues bueno, hay muchos servicios que ofrecen este tipo de trabajo: desde <a title="Geonames" href="http://www.geonames.org">Geonames</a> (un proyecto increible que recoge coordenadas e información geográfica e incluso demográfica de prácticamente todo el planeta&#8230; muy recomendable) hasta los servicios de <a title="Google Data GData API" href="http://code.google.com/apis/gdata/">GData</a> para <a title="Google Maps API" href="http://code.google.com/apis/maps">Google Maps</a>.</p>
<p>La ventaja de usar Google Data (AKA GData) es que el trabajo ya viene hecho, y de paso, está integrado diréctamente en el Google Maps API y por lo tanto el esfuerzo es minomo. Y encima, podemos hacer la consulta de manera asíncrona mediante AJAX. Si usaramos servicios como el de Geonames deberíamos currarnos nosotros mismos esta parte. Pero bueno, todo esto es texto redundante y a nadie le interesan mis verborreas absurdas sobre este tema. Vamos al grano.</p>
<blockquote><p>function showAddress(address)<br />
{<br />
var geocoder = new GClientGeocoder();<br />
geocoder.getLatLng(address,<br />
function(point)<br />
{<br />
if (!point)<br />
alert(address + &#8221; &#8211;&gt; no encontrado en Google Geo Services.&#8221;);<br />
else<br />
map.setCenter(point, 13);<br />
}<br />
);<br />
}</p></blockquote>
<p>Bien, ¿qué hace éste código? Pues es bien sencillo. Primero creamos la instancia de la clase GClientGeocoder, incluido con el Google Maps API desde su versión 2.55, y que contiene una serie de servicios de geocodificado que nos permiten consultar diferentes datos al mercadillo de Mountain View.</p>
<p>Concretamente nos interesa el método getLatLng, que recibe como parámetro la dirección o nombre de la ubicación que nos interesa, y al recibir la respuesta (callback) ejecutará la función creada, recibiendo como parámetro el punto concreto donde se encuentra el lugar, con un objeto de clase GLatLng. ¡Tachán! Ahí está nuestro resultado. Para centrar la vista en él, solo debemos llamar al método setCenter, pasandole como parámetros el punto en cuestión y el nivel de zoom.</p>
<p>Bueno, todo esto está tirado y todos sabemos hacerlo. Sobretodo porque viene en la documentación de la API, y aunque no es exáctamente esta la explicación que dan, es bastante aproximada.</p>
<p>Pero lo interesante aquí es rizar el rizo: recibir como respuesta lugares cercanos a una ubicación concreta.</p>
<p>Dentro del mundo GEO, y a un nivel fundamentalmente básico, hay tres maneras de representar una ubicación:</p>
<ul>
<li>Sus coordenadas geográficas (latitud, longitud)</li>
<li>Su encuadre en un mapa (latitud noreste, longitud noreste, latitud suroeste, longitud suroeste)</li>
<li>Dirección postal (como, por ejemplo, <em>calle celestina 983</em>)</li>
</ul>
<p>Pues bien, en el mismo objeto GClientGeocoder tenemos un método que nos permite pedir a <a title="Google España" href="http://www.google.es">Google</a> una colección de localizaciones cercanas a una ubicación concreta: <a title="GClientGeocoder getLocations" href="http://code.google.com/apis/maps/documentation/reference.html#GClientGeocoder">getLocations</a>, que puede recibir como parámetro de consulta o una dirección, o un punto GLatLng.</p>
<p>¿Qué nos va a devolver esta llamada? Un objeto estructurado con todos los datos precisos: por un lado, la información detallada de la ubicación pedida, y por otro, el resultado de Google para la ubicación, con todas las ubicaciones almacenadas en un array de <em>Placemarks</em>, tal que así (lo pego diréctamente desde la <a title="Google Maps reverse geocoding" href="http://code.google.com/apis/maps/documentation/services.html">documentación de ejemplo de Google</a>, es más claro así, para la geocodificación inversa):</p>
<blockquote>
<pre class="prettyprint"><span class="pun">[</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    name</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Washington, DC"</span><span class="pun">,</span><span class="pln">
    </span><span class="typ">Status</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      code</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200</span><span class="pun">,</span><span class="pln">
      request</span><span class="pun">:</span><span class="pln"> </span><span class="str">"geocode"</span><span class="pln">
    </span><span class="pun">},</span><span class="pln">
    </span><span class="typ">Placemark</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
      </span><span class="pun">{</span><span class="pln">
        address</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Washington, DC, USA"</span><span class="pun">,</span><span class="pln">
        population</span><span class="pun">:</span><span class="pln"> </span><span class="str">"0.563M"</span><span class="pun">,</span><span class="pln">
        </span><span class="typ">AddressDetails</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
          </span><span class="typ">Country</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">CountryNameCode</span><span class="pun">:</span><span class="pln"> </span><span class="str">"US"</span><span class="pun">,</span><span class="pln">
            </span><span class="typ">AdministrativeArea</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
              </span><span class="typ">AdministrativeAreaName</span><span class="pun">:</span><span class="pln"> </span><span class="str">"DC"</span><span class="pun">,</span><span class="pln">
              </span><span class="typ">Locality</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
                </span><span class="typ">LocalityName</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Washington"</span><span class="pln">
              </span><span class="pun">}</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
          </span><span class="pun">},</span><span class="pln">
          </span><span class="typ">Accuracy</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pln">          
        </span><span class="pun">},</span><span class="pln">
        </span><span class="typ">Point</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
          coordinates</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[-</span><span class="lit">77.036667</span><span class="pun">,</span><span class="pln"> </span><span class="lit">38.895000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">]</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">]</span><span class="pln">
  </span><span class="pun">},</span><span class="pln">
  </span><span class="pun">...</span><span class="pln"> </span><span class="com">// etc., and so on for other cities</span><span class="pln">
</span><span class="pun">]</span></pre>
</blockquote>
<p>Espero que os sea de utilidad&#8230; Aunque sea algo tan básico.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;submitHeadline=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;bm_description=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;title=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google+@+http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fgeocodificar-una-direccion-postal-con-los-servicios-de-google%2F&amp;t=Geocodificar+una+direcci%C3%B3n+postal+con+los+servicios+de+Google" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2009/06/geocodificar-una-direccion-postal-con-los-servicios-de-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Peleando para trabajar con AJAX, JSON y PHP</title>
		<link>http://www.moure.es/2009/06/peleando-para-trabajar-con-ajax-json-y-php/</link>
		<comments>http://www.moure.es/2009/06/peleando-para-trabajar-con-ajax-json-y-php/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 21:25:22 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=158</guid>
		<description><![CDATA[Bueno, como vistes en mi anterior post, ando jugueteando a ratos con Javascript y algunas de sus mejores funcionalidades (o metodologías, como prefiráis): AJAX y JSON. Como muchos sabéis, la gran utilidad que se nos presenta explotando estas tres tecnologías (este método, éste protocolo y este lenguaje de programación de scripting de lado de servidor, [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, como vistes en mi anterior post, ando jugueteando a ratos con Javascript y algunas de sus mejores funcionalidades (o metodologías, como prefiráis): AJAX y <a title="JSON con PHP" href="http://www.moure.es/2009/06/ajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente/">JSON</a>. Como muchos sabéis, la gran utilidad que se nos presenta explotando estas tres tecnologías (este método, éste protocolo y este lenguaje de programación de scripting de lado de servidor, para ser exáctos) es la posibilidad de intercambiar datos entre cliente y servidor de manera asíncrona y sin tener que recargar todo el HTML de la página, y por lo tanto, de enviar comandos en uno u otro sentido y conocer el resultado de los mismos.</p>
<p>En PHP existen dos maneras de recoger información que venga del exterior: mediante GET o mediante POST. Cuando trabajamos con GET, podemos probar bien nuestras aplicaciones haciendo uso del ya bien conocido QueryString de la URL, pero cuando tratemos de trabajar diréctamente mediante POST (bastante más seguro y útil) la cosa se vuelve más complicada.</p>
<p>¿Quién no ha desperdiciado horas tratando de enviar parámetros por POST a una aplicación PHP para probar su funcionamiento?</p>
<p>Hoy he visto la luz. Que sí, que muchos ya conoceríais su existencia, pero&#8230; he encontrado este Addon de Firefox que nos permite controlar los parámetros que enviamos a la aplicación tanto mediante GET como POST y probar así diferentes juegos de prueba. Se llama <a title="Tamper Data, Firefox addon" href="https://addons.mozilla.org/en-US/firefox/addon/966">Tamper Data</a>, y os puede facilitar mucho la vida <img src='http://www.moure.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Mira que siempre he sido un buen amante de los <a title="Firefox addons" href="http://www.webdesignbooth.com/35-absolutely-useful-firefox-plugins-for-web-designers-and-developers/">addons para Firefox</a>, pero por suerte o por desgracia soy un programador muy tradicional y siemre intento hacer todo <em>a manita</em> y pasando de herramientas externas siempre que me fuera posible. Porque, como bien me dicen mis amigos, siempre me gusta reinventar la rueda&#8230; ¡qué le vamos a hacer!</p>
<p>Y, como no, también nos permitirá ver la respuesta que recibimos del servidor de manera sencilla, aunque si trabajais con JSON, os recomiendo también instalar otra extensión: <a title="JSONView" href="https://addons.mozilla.org/en-US/firefox/addon/10869">JSONView</a>, que nos mostrará formateada y resaltada mediante diferentes colores y formas nuestras estructuras JSON sin necesidad de andar haciendo <em>pirulas</em> con nuestro Javascript (esos históricos <em>alert(miobjeto.toString());</em> que tanto usamos para hacer pruebas de Javascript&#8230;</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;submitHeadline=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;bm_description=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;title=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP+@+http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fpeleando-para-trabajar-con-ajax-json-y-php%2F&amp;t=Peleando+para+trabajar+con+AJAX%2C+JSON+y+PHP" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2009/06/peleando-para-trabajar-con-ajax-json-y-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX, JSON y jQuery, llamando a funciones de PHP desde el cliente</title>
		<link>http://www.moure.es/2009/06/ajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente/</link>
		<comments>http://www.moure.es/2009/06/ajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 23:17:52 +0000</pubDate>
		<dc:creator>moure</dc:creator>
				<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.moure.es/?p=147</guid>
		<description><![CDATA[¿Alguna vez habéis querido llamar a métodos PHP desde el lado del cliente mediante AJAX? Pues bien, es bastante sencillo y voy a explicarlo de un modo rápido. Puntualizo que para la comunicación usaré el formato JSON (Javascript Object Notation) para la toma y devolución de datos. Para facilitar las peticiones usaremos jQuery, que ya [...]]]></description>
			<content:encoded><![CDATA[<p>¿Alguna vez habéis querido llamar a métodos PHP desde el lado del cliente mediante AJAX? Pues bien, es bastante sencillo y voy a explicarlo de un modo rápido. Puntualizo que para la comunicación usaré el formato <a title="JSON - Javascript Object Notation" href="http://www.json.org/">JSON</a> (Javascript Object Notation) para la toma y devolución de datos.</p>
<p>Para facilitar las peticiones usaremos <a title="jQuery" href="http://jquery.com/">jQuery</a>, que ya trae en sí todo lo necesario para poder realizar este tipo de petición. Primero vamos a crear una función en PHP que multiplique dos números, tal que así:</p>
<blockquote><p>function Multiplicar(a,b) { return a*b; }</p></blockquote>
<p>Hasta aquí supongo que todos hemos llegado. Ahora viene lo divertido&#8230; Creamos la parte de cliente, en Javascript, una vez hayamos incrustado la librería de jQuery en nuestra página:</p>
<blockquote><p>function DoMultiplicar(p_a,p_b)<br />
{<br />
$.post(ruta_al_servicio, {a:p_a,b:p_b,cmd:&#8221;multiplica&#8221;},<br />
function(data)<br />
{<br />
eval(&#8220;var obj = &#8221; + data + &#8220;;&#8221;);<br />
alert(data.result);<br />
}<br />
, &#8220;json&#8221;);<br />
}</p></blockquote>
<p>Y procesamos la petición en PHP:</p>
<blockquote><p>if ($_POST["cmd"] == &#8220;multiplica&#8221;)<br />
Multiplicar($_POST["a"],$_POST["b"]);</p></blockquote>
<p>Vale, pero, ¿qué ha hecho todo esto? Pues muy sencillo&#8230; Por la parte de Javascript, hemos llamado al método $.post, al cuál le hemos pasado como parámetros, en el mismo orden:</p>
<ul>
<li>Ruta al servicio: ruta absoluta al fichero PHP que controla la petición por POST, y que se encarga de la llamada al método Multiplicar.</li>
<li>Parámetros: mediante la notación de objetos de Javascript (JSON), introducimos los difentes parámetros que usará nuestro script de servidor. Para los que no estén familiarizados con JSON, es un protocolo de declaración de objetos de Javascript, que permite crear una estructura de objeto mediante una cadena sencilla, rodeada por llaves, donde cada miembro se separa por comas. Para más información, consultar la página oficial de <a title="JSON - Javascript Object Notation" href="http://www.json.org/">JSON</a>, donde apareden numerosos ejemplos con los que aprender.</li>
<li>Método callback: función que recoge, en este caso, el resultado de la petición. Lo hemos llamado data, pero podéis llamarlo como mejor os venga para vuestro trabajo: el parámetro que recibe será siempre la respuesta del servidor.</li>
</ul>
<p>Una vez recogido el resultado con el callback, ya lo tenemos: el resultado de la multiplicación. Si tenéis dudas, no tengáis problema en dejar comentarios&#8230; aunque sé que este pequeño tutorial es sencillo y básico para muchos <img src='http://www.moure.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , puede que para otros no tanto.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark</em></strong></a>
<br />
<div class="d">
<br />
<a href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;submitHeadline=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente&amp;submitSummary=" rel="nofollow" title="Añadir a&nbsp;Buzz"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/buzz.png" title="Añadir a&nbsp;Buzz" alt="Añadir a&nbsp;Buzz" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;Del.icio.us"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/delicious.png" title="Añadir a&nbsp;Del.icio.us" alt="Añadir a&nbsp;Del.icio.us" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;digg"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/digg.png" title="Añadir a&nbsp;digg" alt="Añadir a&nbsp;digg" /></a>
<a href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;DotNetKicks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Añadir a&nbsp;DotNetKicks" alt="Añadir a&nbsp;DotNetKicks" /></a>
<a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F" rel="nofollow" title="Añadir a&nbsp;Facebook"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/facebook.png" title="Añadir a&nbsp;Facebook" alt="Añadir a&nbsp;Facebook" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;Google Bookmarks"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/google.png" title="Añadir a&nbsp;Google Bookmarks" alt="Añadir a&nbsp;Google Bookmarks" /></a>
<a href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;bm_description=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;Mister Wong"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Añadir a&nbsp;Mister Wong" alt="Añadir a&nbsp;Mister Wong" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;reddit"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/reddit.png" title="Añadir a&nbsp;reddit" alt="Añadir a&nbsp;reddit" /></a>
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;Slashdot"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Añadir a&nbsp;Slashdot" alt="Añadir a&nbsp;Slashdot" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;title=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;Stumble Upon"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Añadir a&nbsp;Stumble Upon" alt="Añadir a&nbsp;Stumble Upon" /></a>
<a href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F" rel="nofollow" title="Añadir a&nbsp;Technorati"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/technorati.png" title="Añadir a&nbsp;Technorati" alt="Añadir a&nbsp;Technorati" /></a>
<a href="http://tipd.com/submit.php?url=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F" rel="nofollow" title="Añadir a&nbsp;Tip'd"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/tipd.png" title="Añadir a&nbsp;Tip'd" alt="Añadir a&nbsp;Tip'd" /></a>
<a href="http://twitter.com/home/?status=Check+out+AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente+@+http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F" rel="nofollow" title="Añadir a&nbsp;Twitter"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/twitter.png" title="Añadir a&nbsp;Twitter" alt="Añadir a&nbsp;Twitter" /></a>
<a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.moure.es%2F2009%2F06%2Fajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente%2F&amp;t=AJAX%2C+JSON+y+jQuery%2C+llamando+a+funciones+de+PHP+desde+el+cliente" rel="nofollow" title="Añadir a&nbsp;Yahoo My Web"><img class="social_img" src="http://www.moure.es/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Añadir a&nbsp;Yahoo My Web" alt="Añadir a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.moure.es/2009/06/ajax-y-jquery-llamando-a-funciones-de-php-desde-el-cliente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

