<?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>MixInformatico.com &#187; Ajax</title>
	<atom:link href="http://www.mixinformatico.com/category/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mixinformatico.com</link>
	<description>Reforzando tus ideas</description>
	<lastBuildDate>Sat, 31 Jul 2010 00:47:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Repaginar datos con AJAX</title>
		<link>http://www.mixinformatico.com/2010/03/25/repaginar-datos-con-ajax/</link>
		<comments>http://www.mixinformatico.com/2010/03/25/repaginar-datos-con-ajax/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 02:31:42 +0000</pubDate>
		<dc:creator>dementexmaster</dc:creator>
				<category><![CDATA[Ajax]]></category>

		<guid isPermaLink="false">http://www.mixinformatico.com/?p=8890</guid>
		<description><![CDATA[Una de las cosas que nos permite AJAX es realizar peticiones asíncronas, las cuales solo recarguen una parte de la página. Esto nos da la posibilidad de dar la sensación de velocidad de cara al usuario. Un caso ejemplo es el de la repaginación de datos. Es decir, tener una lista de elementos dentro de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Una de las cosas que nos permite AJAX es realizar peticiones asíncronas, las cuales solo recarguen una parte de la página. Esto nos da la posibilidad de dar la sensación de velocidad de cara al usuario. Un caso ejemplo es el de la repaginación de datos. Es decir, tener una lista de elementos dentro de las páginas e ir avanzando o retrocediendo en el listado. Buscando no afectar al resto de la página.</p>
<p>En el ejemplo repaginar datos con AJAX nos vamos a centrar en la parte cliente de petición (en nuestra página HTML). No entraremos en detalle de la construcción de la parte servidor. Si bien, dejo pendiente el escribir un artículo completo que utilice AJAX, PHP y acceso a datos MySQL. Lo cual nos dejará ver el proceso entero de una forma más detallada.</p>
<p>Empezaremos definiendo la página del servidor que nos devuelva los datos. Esta puede estar construida en cualquier tecnología del lado del servidor. Véase ASP, PHP, JSP,&#8230; En nuestro caso vamos a crear una pequeña página en JSP.</p>
<p>Esta página recibe un parámetro denominado &#8220;página&#8221;. Según el valor que le llegue como parámetro devolverá una lista HTML u otra. La URL será algo como lo siguiente:</p>
<pre>http://www.miservidor.com/datos.jsp?pagina=2</pre>
<p style="text-align: justify;">Aunque no quiero entrar en detalle del código JSP os adjunto un pequeño extracto del código. De forma orientativa:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;%</span>
&nbsp;
String<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> provincias <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">&quot;Álava&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Albacete&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Alicante&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Almería&quot;</span><span style="color: #339933;">,</span>...<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Zamora&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Zaragoza&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
int pagina <span style="color: #339933;">=</span> Integer.<span style="color: #660066;">valueOf</span><span style="color: #009900;">&#40;</span>request.<span style="color: #660066;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;pagina&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
pagina<span style="color: #339933;">=</span><span style="color: #009900;">&#40;</span>pagina<span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
&nbsp;
out.<span style="color: #660066;">println</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&amp;lt;ul&amp;gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>int x<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>x<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>x<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
&nbsp;
out.<span style="color: #660066;">println</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;
&nbsp;
&lt;li&gt;&quot;</span> <span style="color: #339933;">+</span> provincias<span style="color: #009900;">&#91;</span>pagina<span style="color: #339933;">+</span>x<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/li&gt;
&nbsp;
&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
out.<span style="color: #660066;">println</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&amp;lt;/ul&amp;gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">%&gt;</span></pre></td></tr></table></div>

<p><span id="more-8890"></span></p>
<p style="text-align: justify;">Comentándolo muy por encima, recupera el valor del parámetro utilizando el método .getParameter() y lo utiliza para acceder a un array de String. A partir de ese elemento del array devuelve 10 elementos en una lista HTML utilizando las etiquetas UL y LI.</p>
<p style="text-align: justify;">Pero centrémonos en la parte cliente. Lo primero será definir la página. La página tendrá una capa DIV donde iremos mostrando el contenido. Es importante darle un ID a la capa, ya que nuestro código JavaScript accederá a ella para ir modificando el contenido de forma asíncrona.</p>
<p style="text-align: justify;">Debajo de la capa pondremos 5 enlaces que llamen a una función JavaScript paginar. Esta función será la que realice la petición AJAX y cargue el contenido en la capa DIV.</p>
<p style="text-align: justify;">Veamos este código:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;datos&quot;</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar(1);&quot;</span> title<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span> <span style="color: #339933;">|</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar(2);&quot;</span> title<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">2</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span> <span style="color: #339933;">|</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar(3);&quot;</span> title<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">3</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span> <span style="color: #339933;">|</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar(4);&quot;</span> title<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">4</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span> <span style="color: #339933;">|</span>
&nbsp;
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&quot;</span> onclick<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar(5);&quot;</span> title<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;paginar&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #CC0000;">5</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p style="text-align: justify;">La función JavaScript paginar será la que realice todo el trabajo. Como vemos esta función recibe un parámetro que indica el número de página sobre el que queremos posicionarnos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> paginar<span style="color: #009900;">&#40;</span>pagina<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>...<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Lo primero que tiene que realizar esta función es cargar el objeto que nos permita realizar las peticiones asíncronas a modo AJAX. Este objeto es XMLHttpRequest.</p>
<p style="text-align: justify;">Aunque el objeto XMLHttpRequest es un objeto ya estandarizado y definido por la W3C hay ciertos navegadores (como el Internet Explorer) que siguen sin implementarlo. En su defecto utilizan el objeto Microsoft.XMLHTTP. Este viene a hacer lo mismo, o algo parecido, pero con otro nombre.</p>
<p style="text-align: justify;">Es por ello que la instancia del objeto XMLHttpRequest se complica un poco. Quedaría de la siguiente manera:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Llama objeto XMLHttpRequest</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">XMLHttpRequest</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
req <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Si no funciona intenta utiliar el objeto IE/Windows ActiveX</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
req <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">La variable que tiene la instancia es req. Esta variable será la que represente la conexión con el servicio de datos</p>
<p style="text-align: justify;">El siguiente paso será establecer la conexión. Para ello seguimos tres pasos:</p>
<p style="text-align: justify;">Primero indicamos que función JavaScript es la que va a procesar la respuesta del servidor. Esto lo hacemos mediante el evento .onreadystatechange de la petición. En nuestro caso será la función JavaScript &#8220;procesarRespuesta&#8221;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">req.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> procesarRespuesta<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Segundo indicamos la URL a la cual queremos realizar la petición. Para componer la URL concatenamos la URL del servicio de datos con el número de página recibido como parámetro.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">url <span style="color: #339933;">=</span> <span style="color: #3366CC;">'http://www.miservidor.com/datos.jsp?pagina='</span> <span style="color: #339933;">+</span> pagina<span style="color: #339933;">;</span>
req.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>url<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">El método .open es el que utilizamos para indicar la URL. Este tiene varios parámetros: tipo de petición (GET,POST o PUT), la URL y si queremos que sea síncrono -false- o asíncrono -false- como tercer parametro.</p>
<p>Tercero y último realizamos la petición. Para ello nos apoyamos en el método .send()</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">req.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> paginar<span style="color: #009900;">&#40;</span>pagina<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
req <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Llama objeto XMLHttpRequest</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">XMLHttpRequest</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
req <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Si no funciona intenta utiliar el objeto IE/Windows ActiveX</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
req <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>req<span style="color: #339933;">!=</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
req.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> procesarRespuesta<span style="color: #339933;">;</span>
&nbsp;
url <span style="color: #339933;">=</span> <span style="color: #3366CC;">'datos.jsp?pagina='</span> <span style="color: #339933;">+</span> pagina<span style="color: #339933;">;</span>
&nbsp;
req.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;GET&quot;</span><span style="color: #339933;">,</span>url<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
req.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Ahora nos tenemos que centrar en la función JavaScript  &#8220;procesarRespuesta&#8221;. Esta función es la que recibirá los datos del servidor y los colocará en la capa.<br />
Los datos de la respuesta vienen en la propiedad .responseText de la petición (es decir, del objeto req). Es por ello que simplemente tenemos que pegarlos en la capa.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> procesarRespuesta<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
contenido <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'datos'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
contenido.<span style="color: #660066;">innerHTML</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;Cargando los datos...&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>req.<span style="color: #660066;">readyState</span><span style="color: #339933;">==</span><span style="color: #CC0000;">4</span> <span style="color: #339933;">&amp;&amp;</span> req.<span style="color: #000066;">status</span><span style="color: #339933;">==</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//mostrar resultados en esta capa</span>
&nbsp;
contenido.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> req.<span style="color: #660066;">responseText</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Para poder poner los datos en la capa DIV tenemos que haber accedido a ella mediante su ID y la función .getElementById(). Para modificar el contenido de una capa nos apoyamos en la propiedad .innerHTML. Esta propiedad será sobre la que dejemos el contenido de responseText.</p>
<p style="text-align: justify;">Y ya está. Con esto hemos construido una repaginación de datos con AJAX de una forma muy sencilla.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mixinformatico.com/2010/03/25/repaginar-datos-con-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.357 seconds -->

