<?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>Telepieza´s Weblog &#187; JPSpan-Ajax</title>
	<atom:link href="http://www.telepieza.com/wordpress/category/informatica/programacion/jpspan-ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.telepieza.com/wordpress</link>
	<description></description>
	<lastBuildDate>Thu, 09 Feb 2012 21:59:26 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Solución de incompatibilidad entre Mootools y JPSpan en páginas Web con AJAX.</title>
		<link>http://www.telepieza.com/wordpress/2009/05/04/solucion-de-incompatibilidad-entre-mootools-y-jpspan-en-paginas-web-con-ajax/</link>
		<comments>http://www.telepieza.com/wordpress/2009/05/04/solucion-de-incompatibilidad-entre-mootools-y-jpspan-en-paginas-web-con-ajax/#comments</comments>
		<pubDate>Mon, 04 May 2009 19:07:01 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[JPSpan-Ajax]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JPSpan]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.telepieza.com/wordpress/?p=683</guid>
		<description><![CDATA[ Mootools es un Framework (Estructura de soporte definida, mediante la cual otro proyecto de software puede ser desarrollado), web orientado a objeto para JavaScript, de código abierto (Open Source). Gracias a dicho programa podemos desarrollar aplicaciones de escritorio de una forma sencilla y elegante. Es interesante leer la información de la wikipedia para entender mejor el porqué [...]]]></description>
			<content:encoded><![CDATA[<p><strong> <a href="http://mootools.net/" target="_blank">Mootools </a></strong>es un Framework (Estructura de soporte definida, mediante la cual otro proyecto de software puede ser desarrollado), web orientado a objeto para JavaScript, de código abierto (Open Source). Gracias a dicho programa podemos desarrollar aplicaciones de escritorio de una forma sencilla y elegante.</p>
<p>Es interesante leer la <a href="http://es.wikipedia.org/wiki/Mootools" target="_blank">información de la wikipedia </a>para entender mejor el porqué es necesario programas como Mootools, Jquery, Dojo, Prototype  o script.aculo.us para desarrollar páginas web cada vez más interactivas con el usuario final (Internauta).</p>
<p>Mootools tiene un API para ajax, pero en mi opinión el modulo JPSpan está más desarrollado para entornos AJAX &#8211; PHP.</p>
<p>JPSpan una de las cosas que tiene muy buenas es el control de 6 tipos diferentes de errores.</p>
<ol>
<li>Control de Error en la comunicación con XMLHttpRequest.</li>
<li>Mensajes de Error durante la comunicación con el Servidor.</li>
<li>Control de Error desde el Servidor al Cliente.</li>
<li>Mensajes de Error de Aplicación del Servidor al Cliente.</li>
<li>Mensajes de Error de Aplicación del Cliente al Servidor.</li>
<li>Error de sintaxis en los programas de JavaScript</li>
</ol>
<p>JPSpan no se centra sólo en gestionar bien los mensajes de error, sino en la comunicación de datos pudiendo ser en los siguientes formatos:  JSON, PHP, XML, TXT.</p>
<p>Podemos utilizar Mootools como gestor de eventos para controlar las teclas y el ratón en nuestra aplicación WEB, dejando el código de nuestra página sólo con código HTML, sin ninguna instrucción  JavaScript y CSS.</p>
<p>Se dice que la era de la WEB 2.0 es eso, uno o varios ficheros con extensión  .css para los estilos, uno o varios ficheros .js para el código JavaScript y por último una página realizada en php o html o .NET o Java, que su resultado final  es sólo código HTML.</p>
<p>Todo lo expuesto no es posible si no tenemos herramientas como Mootools o JPSpan para poder realizar nuestros proyectos con una precisión y fiabilidad increible.</p>
<p>Pero todo tiene una pega, y son las incompatibilidades que un programador tiene cuando quiere unir diferentes programas (Mootools y JPSpan)  para poder llegar a un resultado final  esperado por el programador, cuando tenemos dichos problemas, nos es muy dificil solucionarlos por tener poca ayuda disponible en Internet.</p>
<p>Escribo dicho post para explicar cómo solucionar un problema grave de funcionamiento del modulo JPSpan utilizando Mootools como framework en nuestras aplicaciones Web.</p>
<p>El problema radica en la no recepción de parámetros o datos enviados por nuestro programa realizado en JavaScript al servidor de datos PHP.</p>
<p><span id="more-683"></span></p>
<p>Para solucionar el problema tenemos que ir al programa post.js que está en JPSpan/js/request, buscamos la instrucción (ver código abajo) y añadimos la instrucción  :</p>
<p>                    <span style="color: #ff0000;"><strong>if (!isNaN(argName))  { y su parentisis al final ),</strong></span></p>
<p>for ( var argName in this.args ) {<br />
             <strong>  </strong><span style="color: #ff0000;"><strong>if (!isNaN(argName))  {<br />
</strong></span>            try {<br />
                this.body += sep + argName + &#8216;=&#8217;;<br />
                this.body += encodeURIComponent(this.encoder.encode(this.args[argName]));<br />
            } catch (e) {<br />
                throw JPSpan_Client_Error(e, 1006);<br />
            }<br />
            sep = &#8216;&amp;&#8217;;<br />
       <span style="color: #ff0000;">  <strong>}</strong><br />
</span>        }</p>
<p>Añadir las dos instrucciones que están en rojo, dicha instrucción pregunta si el índice del objeto o el parámetro es numérico, si es así lo procesa, sino no lo graba en this.body, de esa forma sólo enviamos los parametros deseados al servidor y eliminamos un montón de datos que el módulo Mootools ha grabado el solito sin que nosotros le digamos nada.</p>
<p>Una vez modificado el programa post.js, tenemos que realizar la misma operación con el programa get.js</p>
<p>       for ( var argName in this.args ) {<br />
          <span style="color: #ff0000;"><strong>if (!isNaN(argName))  {<br />
</strong></span>            try {<br />
                uri += sep + argName + &#8216;=&#8217;;<br />
                uri += encodeURIComponent(this.encoder.encode(this.args[argName]));<br />
            } catch (e) {<br />
                throw JPSpan_Client_Error(e, 1006);<br />
            }<br />
            sep = &#8216;&amp;&#8217;;<br />
         <span style="color: #ff0000;"><strong> }<br />
</strong></span>        };<br />
 </p>
<p>El resto de funcionalidades de JPSpan no he notado nada anormal cuando incorporamos en nuestra página el módulo Mootools para realizar nuestros programas WEB 2.0 estilo escritorio.</p>
<p>Saludos de telepieza.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.telepieza.com%2Fwordpress%2F2009%2F05%2F04%2Fsolucion-de-incompatibilidad-entre-mootools-y-jpspan-en-paginas-web-con-ajax%2F&amp;title=Soluci%C3%B3n%20de%20incompatibilidad%20entre%20Mootools%20y%20JPSpan%20en%20p%C3%A1ginas%20Web%20con%20AJAX." id="wpa2a_2"><img src="http://www.telepieza.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.telepieza.com/wordpress/2009/05/04/solucion-de-incompatibilidad-entre-mootools-y-jpspan-en-paginas-web-con-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con JPSpan para PHP 5ª parte</title>
		<link>http://www.telepieza.com/wordpress/2009/04/13/ajax-con-jpspan-para-php-5%c2%aa-parte/</link>
		<comments>http://www.telepieza.com/wordpress/2009/04/13/ajax-con-jpspan-para-php-5%c2%aa-parte/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 23:10:36 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JPSpan-Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JPSpan]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.telepieza.com/wordpress/?p=676</guid>
		<description><![CDATA[Vamos a realizar un pequeño resumen en la 5ª parte de lo aprendido sobre JPSpan y PHP antes de seguir aprendiendo más cosas sobre la tecnología AJAX &#8211; JPSpan &#8211; PHP. &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. 1.- JPSpan se comunica mediante HTTP, define la sintaxis y la semántica que utilizan los elementos software de la arquitectura web (clientes, servidores, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Vamos a realizar un pequeño resumen en la 5ª parte de lo aprendido sobre JPSpan y PHP antes de seguir aprendiendo más cosas sobre la tecnología AJAX &#8211; JPSpan &#8211; PHP.</p>
<p style="text-align: justify;">
<a href="http://www.telepieza.com/wordpress/wp-content/gallery/imagenes/jpspan_05.jpg" title="" class="thickbox" rel="singlepic807" >
	<img class="ngg-singlepic" src="http://www.telepieza.com/wordpress/wp-content/gallery/cache/807__450x437_jpspan_05.jpg" alt="jpspan_05.jpg" title="jpspan_05.jpg" />
</a>
</p>
<p style="text-align: justify;"><span style="color: #ffffff;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..</span></p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>1.-</strong></span> JPSpan se comunica mediante HTTP, define la sintaxis y la semántica que utilizan los elementos software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor.</p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>2.-</strong></span> JPSpan utiliza el Objeto XMLHttpRequest (XHR), también referida como XMLHTTP (Extensible Markup Language / Hypertext Transfer Protocol), es una interfaz empleada para realizar peticiones HTTP y HTTPS a servidores WEB. Para los datos transferidos se usa cualquier codificación basada en texto, incluyendo: texto plano, PHP, XML, JSON, HTML. Dicho objeto lo tenéis en JPSpan/js/httpclient.js</p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>3.-</strong></span> JPSpan utiliza la técnica de reflexión de objetos. La reflexión es un proceso mediante el cual un programa es capaz de obtener información sobre si mismo y por tanto es capaz de auto modificarse en tiempo de ejecución. JavaScript emplea el concepto de reflexión para permitir descubrir propiedades y métodos de objetos externos. El ejemplo más sencillo es el de averiguar si un objeto posee un determinado método y así poder ejecutarlo (Eso es lo que hace JPSpan).</p>
<p style="text-align: justify;"><span id="more-676"></span></p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>4.-</strong></span> JPSpan puede utilizar JSON, acrónimo de &#8220;JavaScript Object Notation&#8221;, es un formato ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript que no requiere el uso de XML.</p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>5.-</strong></span> JPSpan puede utilizar XML-RPC es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes, gracias al Objeto XMLHttpRequest.</p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>6.-</strong></span> JPSpan está pensado para trabajar con servidores PHP. Es un lenguaje de programación <span class="mw-redirect">interpretado</span>, diseñado originalmente para la creación de páginas web dinámicas, y puede ser incrustado en páginas de código HTML.</p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>7.-</strong></span> JPSpan se utiliza para la<strong> técnica AJAX</strong>, acrónimo de <em><strong>A</strong>synchronous <strong>J</strong>avaScript <strong>A</strong>nd <strong>X</strong>ML</em> (JavaScript asíncrono y <span class="mw-redirect">XML</span>), es una técnica de desarrollo web para crear aplicaciones interactivas o <span class="mw-redirect">de entorno escritorio.</span></p>
<p style="text-align: justify;"><strong><span style="color: #993300;">8.-</span></strong> JPSpan no es un entorno de programación, sino de comunicaciones mediante HTTP y gestion de Errores entre el Cliente (Navegador) y el Servidor de PHP, utilizando la técnica AJAX mediante el objeto XMLHttpRequest.</p>
<p style="text-align: justify;"><strong><span style="color: #993300;">9.- </span></strong>JPSpan puede representar sus argumentos pasados por el servidor (Variables), mediante DOM (Document Object Model), es una interfaz de programación de aplicaciones que proporciona un conjunto estándar de objetos para representar documentos HTML y XML.  DOM es una API para acceder, añadir y cambiar dinámicamente contenido estructurado en documentos con lenguajes como ECMAScript (<span class="mw-redirect">Javascript</span>).</p>
<p style="text-align: justify;"><span style="color: #993300;"><strong>10.-</strong></span> JPSpan al lado del Cliente (Navegador), necesita para que funcione lenguaje <strong>JavaScript. </strong>Dicho lenguaje es de<span class="mw-redirect"> programación interpretado</span>, es decir, que no requiere <span class="mw-redirect">compilación</span>, utilizado principalmente en páginas web, con una sintaxis semejante a lenguajes orientado a objetos como Java , C++ .</p>
<p style="text-align: justify;"><strong><span style="color: #993300;">11.- </span></strong>JPSpan por ser tecnología HTTP, necesita de un servidor Web Apache o IIS para windows con soporte versión 5 de PHP.</p>
<p style="text-align: justify;"><strong><span style="color: #993300;">RESUMIENDO :</span></strong></p>
<p style="text-align: justify;">JPSpan es un marco de trabajo Ajax construido con la intención de integrar JavaScript, CSS, XML, HTML, DOM y JSON, en el lado del Cliente (Navegador) con el código del lado del servidor escrito en PHP para realizar aplicaciones web interactivas.</p>
<p style="text-align: justify;"> Un Saludo de Telepieza</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.telepieza.com%2Fwordpress%2F2009%2F04%2F13%2Fajax-con-jpspan-para-php-5%25c2%25aa-parte%2F&amp;title=Ajax%20con%20JPSpan%20para%20PHP%205%C2%AA%20parte" id="wpa2a_4"><img src="http://www.telepieza.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.telepieza.com/wordpress/2009/04/13/ajax-con-jpspan-para-php-5%c2%aa-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con JPSpan para PHP 4ª parte</title>
		<link>http://www.telepieza.com/wordpress/2009/04/12/ajax-con-jpspan-para-php-4%c2%aa-parte/</link>
		<comments>http://www.telepieza.com/wordpress/2009/04/12/ajax-con-jpspan-para-php-4%c2%aa-parte/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 00:35:04 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JPSpan-Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JPSpan]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.telepieza.com/wordpress/?p=674</guid>
		<description><![CDATA[Nos vamos a centrar en la 4ª parte en estudiar el método  displayClient(), por ser el encargado de generar el esquema de código JavaScript necesario para la comunicación. Cómo hemos indicado JPSpan proporciona al Cliente el código JavaScript necesario para realizar llamadas a la clase en el lado del servidor y hacer que la página [...]]]></description>
			<content:encoded><![CDATA[<p style="TEXT-ALIGN: justify">
<a href="http://www.telepieza.com/wordpress/wp-content/gallery/imagenes/jpspan_04.jpg" title="" class="thickbox" rel="singlepic808" >
	<img class="ngg-singlepic" src="http://www.telepieza.com/wordpress/wp-content/gallery/cache/808__200x185_jpspan_04.jpg" alt="jpspan_04.jpg" title="jpspan_04.jpg" />
</a>
 Nos vamos a centrar en la 4ª parte en estudiar el método <span style="color: #993300;"> displayClient(), </span>por ser el encargado de generar el esquema de código JavaScript necesario para la comunicación.</p>
<p style="TEXT-ALIGN: justify">Cómo hemos indicado JPSpan proporciona al Cliente el código JavaScript necesario para realizar llamadas a la clase en el lado del servidor y hacer que la página pueda gestionar las llamadas en sí.</p>
<p style="TEXT-ALIGN: justify">La función displayCliente(), está en la página /JPSpan/Server.php y es :</p>
<p style="TEXT-ALIGN: justify">/**<br />
* Display the Javascript client and exit<br />
* @return void<br />
* @access public<br />
*/<br />
function displayClient() {<br />
$G = &amp; $this-&gt;getGenerator();<br />
require_once JPSPAN . &#8216;Include.php&#8217;;<br />
$I = &amp; JPSpan_Include::instance();<br />
// HACK &#8211; this needs to change<br />
$I-&gt;loadString(__FILE__,$G-&gt;getClient());<br />
<span style="color: #993300;"><strong><span style="color: #000080;">$client</span></strong><span style="color: #000080;"> = $I-&gt;getCode(); </span><br />
<span style="color: #000000;">header(&#8216;Content-Type: application/x-javascript&#8217;);<br />
header(&#8216;Content-Length: &#8216;.strlen($client));<br />
echo $client;</span></span><br />
}
</p>
<p style="TEXT-ALIGN: justify">Lo importante de dicho método es la generación de la variable $client, es donde está todo el código JavaScript generado por JPSpan en función a los parámetros que le hemos enviado, por ejemplo, indicar que el código de transmisión de los argumentos (variables) sea por &#8216;php&#8217;, &#8216;xml&#8217; o json&#8217; o Comprimir el código JavaScript mediante la página script.php.</p>
<p style="TEXT-ALIGN: justify">Cómo no es posible visualizar por pantalla la variable $client, vamos a introducir tres líneas nuevas de código php (ver abajo en rojo la incorporación) para grabar dicha variable en un fichero con nombre <span style="color: #ff0000;">&#8216;logclient.txt&#8217; </span>para analizar su contenido en profundidad y es :</p>
<p style="TEXT-ALIGN: justify">/**<br />
* Display the Javascript client and exit<br />
* @return void<br />
* @access public<br />
*/<br />
function displayClient() {<br />
$G = &amp; $this-&gt;getGenerator();<br />
require_once JPSPAN . &#8216;Include.php&#8217;;<br />
$I = &amp; JPSpan_Include::instance();<br />
// HACK &#8211; this needs to change<br />
$I-&gt;loadString(__FILE__,$G-&gt;getClient());<br />
$client = $I-&gt;getCode();<br />
<span style="color: #ff0000;">$t_log_fp   = fopen(&#8216;logclient.txt&#8217;, &#8216;w&#8217;);<br />
fwrite($t_log_fp, $client );<br />
fclose($t_log_fp);<br />
<span style="color: #000000;">header(&#8216;Content-Type: application/x-javascript&#8217;);<br />
header(&#8216;Content-Length: &#8216;.strlen($client));<br />
echo $client;<br />
}</span></span>
</p>
<p style="text-align: left;"><span style="color: #ff0000;"><span style="color: #000000;">La primera instrucción insertada por nosotros <span style="color: #ff0000;">$t_log_fp  = fopen(&#8216;logclient.txt, &#8216;w&#8217;); </span><span style="color: #000000;">le indicamos que abra el fichero de modo escritura, si no existe lo crea, y que empiece en el primer registro al indicar la letra &#8216;w&#8217;.</span></span></span></p>
<p style="text-align: left;"><span style="color: #ff0000;"><span style="color: #000000;">La segunda instrucción <span style="color: #ff0000;"> fwrite($t_log_fp, $clientn ); </span><span style="color: #000000;">le indicamos que grabe en dicho fichero la variable $client.</span></span></span></p>
<p style="text-align: left;"><span style="color: #ff0000;"><span style="color: #000000;"><span style="color: #ff0000;"><span style="color: #000000;">La tercera instrucción<span style="color: #ff0000;"> fclose($t_log_fp); </span><span style="color: #000000;">le indicamos que cierre el fichero logclient.txt.</span></span></span></span></span></p>
<p style="text-align: left;"><span style="color: #800080;"><strong>NOTA :</strong></span> Cuando activamos el programa realizado en html con el navegador y llama al programa jpspan_server.php del servidor, grabará en la carpeta  (donde ha sido llamado el programa jpspan_server.php) <a href="/wordpress/wp-content/uploads/logclient.txt?phpMyAdmin=7UKZVSw%2CMdqYYpB4WFurVFmp2u5" target="_blank">el fichero logclient.txt</a> con todas las instrucciones javascript necesarias para poder realizar la comunicación.</p>
<p>Podemos ver el fichero una vez generado : <a href="/wordpress/wp-content/uploads/logclient.txt?phpMyAdmin=7UKZVSw%2CMdqYYpB4WFurVFmp2u5" target="_blank">FICHERO LOGCLIENT.TXT</a></p>
<p><span id="more-674"></span></p>
<p>Al verlo nos damos cuenta que tiene más de 1200 líneas y un peso de 33 Kb. Es la unión de varios ficheros js que lee el programa para generar en una sola variable  ($client) según la necesidades de comunicación y compresión. Los programas JavaScript que lee están en la ruta /JPSpan/js y son : serialize.js, httpclient.js, json,js , remoteobject.js, recuest.js, otra carpeta que utiliza es  /JPSpan/js/code/php.js , xml.js , json.js y por último la carpeta /JPSpan/js/request/get.js , post.js , rawpost.js.</p>
<p>Una vez leídos y procesados todos los .js necesarios para la comunicación, al final de la varaible $client crea el programa todos los métodos necesarios de la function customer para la interconexión entre los dos programas (Cliente y Servidor).</p>
<p>Ejemplo de la función customer creada por el programa :</p>
<p>function customer() {<br />
var oParent = new JPSpan_RemoteObject();<br />
if ( arguments[0] ) {  oParent.Async(arguments[0]); }<br />
oParent.__serverurl = &#8216;http://localhost/generic/jpspan_server.php/customer&#8217;;<br />
oParent.__remoteClass = &#8216; customer&#8217;;<br />
oParent.__request = new JPSpan_Request_Post(new JPSpan_Encode_PHP());<br />
oParent.getmydatos = function() { var url = this.__serverurl+&#8217;/getmydatos/&#8217;;<br />
return this.__call(url,arguments,&#8217;getmydatos&#8217;);  };<br />
return oParent;  }</p>
<hr />
<p style="text-align: justify;">Imaginaros que realizo un programa en html que pide un código de una referencia y el programa JPSpan del servidor tiene que devolver la descripción, el Pr. Venta y los descuentos, según lo analizado anteriormente, nos generará una variable $client de más de 1.200 líneas con un peso de 33 Kb, si nuestro programa pide 10 referencias, el programa abra generado más de 12.000 líneas con un peso de 330 Kb.</p>
<p style="text-align: justify;"><strong>Vamos es como matar moscas a cañonazos.</strong></p>
<p style="text-align: justify;">Tenemos que solucionar el problema de peso y número de líneas de la variable $client, no puede llegar a sobrepasar más de 12 Kb y no puede tener más de 15 líneas en su conjunto, para que pueda ser competitivo el módulo JPSpan con otros programas similares a él .</p>
<p style="text-align: justify;">Cómo hemos indicado el propio programa JPSpan tiene un compresor de código JavaScript y lo hemos rechazado, porque cada vez que genera el objeto client, tiene que realizar la compresión y eso relentiza un montón todo el proceso de comunicaciones.</p>
<p style="text-align: justify;">Para solucionar el problema de peso y número de líneas tenemos que comprimir los ficheros javascript que lee el programa servidor realizado en php de antemano (Antes de ser leídos por JPSpan). Eso significa comprimir el serialize.js, httpclient.js, remoteobject.js, request.js, php.js, xml.js, json.js, get.js, post.js y rawpost.js.</p>
<p style="text-align: justify;">Para ello, tenemos que ir al mejor compresor de instrucciones javascript que existe en la red y no es otro que el realizado por Yahoo <span id="downloadbutton" class="yui-button yui-link-button" style="margin-bottom: 1em;"><a href="http://www.julienlecomte.net/yuicompressor/" target="_blank">Download YUI Compressor version 2.4.2</a>, en dicha página nos explica el funcionamiento del programa, está realizado en java, pero la verdad es muy bueno.</span></p>
<p style="text-align: justify;">Aquí les dejo el proceso de compresión de los ficheros xxxxxx.js que los pasa ya comprimidos a xxxxx2.js, por ejemplo el httpclient.js pasa a httpclient2.js ya comprimido.</p>
<p style="text-align: justify;"><strong><span style="color: #993300;">NOTA :</span></strong> Pasar todos los ficheros xxxxx.js a la carpeta /yuicompressor-2.4-2/build/ y crear un programa .bat con el editor de texto para que realice la compresión de todos ellos. <strong><span style="color: #003300;"><br />
</span></strong>
</p>
<p style="text-align: justify;"><strong><span style="color: #003300;">Programa JPSpan.bat :</span></strong></p>
<p style="text-align: left;"><span class="yui-button yui-link-button" style="margin-bottom: 1em;">java -jar yuicompressor-2.4.2.jar &#8211;type js httpclient.js   -o httpclient2.js   <br />
java -jar yuicompressor-2.4.2.jar &#8211;type js remoteobject.js -o remoteobject2.js<br />
java -jar yuicompressor-2.4.2.jar &#8211;type js request.js      -o request2.js      <br />
java -jaryuicompressor-2.4.2.jar &#8211;type js serialize.js    -o serialize2.js    <br />
java -jar yuicompressor-2.4.2.jar  &#8211;type js json.js         -o json2.js         <br />
java -jar yuicompressor-2.4.2.jar &#8211;type js php.js          -o php2.js          <br />
java -jar yuicompressor-2.4.2.jar &#8211;type js xml.js          -o xml2.js         <br />
java -jar yuicompressor-2.4.2.jar &#8211;type js get.js          -o get2.js          <br />
java -jar yuicompressor-2.4.2.jar &#8211;type js post.js         -o post2.js      <br />
java -jar yuicompressor-2.4.2.jar &#8211;type js rawpost.js    -o rawpost2.js </span>
</p>
<p style="text-align: left;">Una vez comprimido los ficheros aún no podemos renombrarlos y pasarlos a la carpeta JPSpan/js, porque tenemos que incluir en algunos de ellos, el encabezado &#8220;include&#8221; que el JPSpan necesita en algunos ficheros .js,  y el compresor de yahoo ha eliminado por entender que son comentarios.</p>
<p style="text-align: justify;">En el fichero request2.js incluiremos al principio estas cuatro líneas que están al principio del fichero sin comprimir request.js (Editar el fichero request.js y ver dichas líneas)</p>
<p style="text-align: justify;">/**@<br />
* include &#8216;httpclient.js&#8217;;<br />
* include &#8216;json.js&#8217;;<br />
*/
</p>
<p style="text-align: justify;">En el fichero json2.js está repetido dos veces, una en la carpeta /js y otra en la carpeta js/code/ incluiremos al principio estas tres líneas que están al principio del fichero sin comprimir json.js, tiene que estar repetido en las dos carpetas, no borrar ninguno de ellos.</p>
<p style="text-align: justify;">/**@<br />
* include &#8216;serialize.js&#8217;;<br />
*/
</p>
<p style="text-align: justify;">En los ficheros php2.js y xml2.js incluiremos al principio estas tres líneas que están al principio del fichero sin comprimir php.js y xml.js (Editar el fichero php.js y xml.js y ver dichas líneas)</p>
<p style="text-align: justify;">/**@<br />
* include &#8216;serialize.js&#8217;;<br />
*/
</p>
<p style="text-align: justify;">De los ficheros get2.js, post2.js y rawpost2.js incluiremos estas tres líneas que están al principio del fichero sin comprimir get.js, post.js y rawpost.js de la carpeta js/request/ (Editar el fichero get.js, post.js y rawpost.js y ver dichas líneas)</p>
<p style="text-align: justify;">/**@<br />
* include &#8216;request.js&#8217;;<br />
*/
</p>
<p style="text-align: justify;">Una vez introducidos todos los includes borrados por el compresor, guardamos los .js originales sin comprimir y pasamos ya renombrados los xxxxx2.js comprimidos machacando los originales con xxxxx.js.</p>
<p style="text-align: justify;">Y ahora hacemos una prueba con nuestro programa de comunicaciones y vemos si enseña los datos, si los enseña es que todo el proceso de compresión es correcto, si por algún motivo no enseña los datos, es porque te falta algún include en un .js o has borrado algún .js de la carpeta JPSpan/js.</p>
<p style="text-align: justify;">Podemos ver el fichero una vez generado con los .js comprimidos por el programa de yahoo : <a href="/wordpress/wp-content/uploads/logclient2.txt?phpMyAdmin=7UKZVSw%2CMdqYYpB4WFurVFmp2u5" target="_blank">FICHERO LOGCLIENT2.TXT</a>, el fichero resultante tiene 12 Kb, pero aún tiene muchas líneas unas 30, y es porque al crear la  funcion costumer el programa deja espacios en blanco por cada instrucción añadida a la variable client.</p>
<p style="text-align: justify;">Para solucionar el problema, editamos el programa JPSpan/server/PostOffice.php y al final veremos la function generateHandleCliente y empezamos a eliminar los blancos y unir varias líneas en una sola, el código ya cambiado tiene que quedar más o menos asi:</p>
<p style="text-align: left;">function gerateHandleClient(&amp; $Code, &amp; $Description) {<br />
ob_start();<br />
?&gt;<br />
function &lt;?php echo $Description-&gt;Class; ?&gt;() { var oParent = new JPSpan_RemoteObject();<br />
if ( arguments[0] ) {  oParent.Async(arguments[0]);  } oParent.__serverurl = &#8216;&lt;?php<br />
echo $this-&gt;serverUrl . &#8216;/&#8217; . $Description-&gt;Class; ?&gt;&#8217;; oParent.__remoteClass = &#8216; &lt;?php echo $Description-&gt;Class; ?&gt;&#8217;;<br />
&lt;?php<br />
switch ($this-&gt;RequestEncoding) {<br />
case &#8216;xml&#8217;:<br />
?&gt;oParent.__request = new JPSpan_Request_RawPost(new JPSpan_Encode_Xml()); &lt;?php<br />
break;<br />
case &#8216;json&#8217;:<br />
?&gt;oParent.__request = new JPSpan_Request_RawPost(new JPSpan_Encode_JSON());&lt;?php<br />
break;<br />
default:<br />
?&gt;oParent.__request = new JPSpan_Request_Post(new JPSpan_Encode_PHP());&lt;?php<br />
}</p>
<p style="text-align: left;">foreach ( $Description-&gt;methods as $method ) {<br />
?&gt;<br />
oParent.&lt;?php echo $method; ?&gt; = function() { var url = this.__serverurl+&#8217;/&lt;?php echo $method; ?&gt;/&#8217;;<br />
return this.__call(url,arguments,&#8217;&lt;?php echo $method; ?&gt;&#8217;); }; &lt;?php }?&gt;return oParent; } &lt;?php<br />
$Code-&gt;append(ob_get_contents());<br />
ob_end_clean();<br />
}<br />
}
</p>
<p style="text-align: left;">Una vez realizado los cambios en el programa .php, volvemos a realizar otra prueba para ver el resultado de nuestra variable $client en el fichero :  <a href="/wordpress/wp-content/uploads/logclient3.txt?phpMyAdmin=7UKZVSw%2CMdqYYpB4WFurVFmp2u5" target="_blank">FICHERO LOGCLIENT3.TXT</a></p>
<p style="text-align: justify;">AHORA SI, LA VARIABLE $CLIENT SÓLO PESA 12 Kb Y TAN SÓLO TIENE 12 LÍNEAS, HEMOS GANADO EN RÁPIDEZ Y PRECISIÓN EN LAS COMUNICACIONES ENTRE EL SERVIDOR Y EL NAVEGADOR.</p>
<p style="text-align: justify;">YA EMPIEZA A SER COMPETITIVO E INTERESANTE EL MÓDULO JPSpan PARA LAS COMUNICACIONES CON AJAX EN NUESTROS PROGRAMAS.</p>
<p style="text-align: justify;">Pero aún no hemos terminado, estamos en el principio de algo grande para todos nosotros a nivel de comunicaciones estilo AJAX con PHP &#8230;&#8230;&#8230;&#8230;</p>
<p style="text-align: justify;"><span style="color: #800000;"><strong>OBSERVACIONES :</strong></span> Una vez realizada todas las pruebas , recordar en comentar las tres instrucciones creadas en la function displayClient(), para que no genere el fichero logclient.txt</p>
<p style="text-align: justify;">function displayClient() {<br />
$G = &amp; $this-&gt;getGenerator();<br />
require_once JPSPAN . &#8216;Include.php&#8217;;<br />
$I = &amp; JPSpan_Include::instance();<br />
// HACK &#8211; this needs to change<br />
$I-&gt;loadString(__FILE__,$G-&gt;getClient());<br />
$client = $I-&gt;getCode();<br />
<span style="color: #ff0000;">// $t_log_fp   = fopen(&#8216;logclient.txt&#8217;, &#8216;w&#8217;);<br />
// fwrite($t_log_fp, $client );<br />
// fclose($t_log_fp);<br />
<span style="color: #000000;">header(&#8216;Content-Type: application/x-javascript&#8217;);<br />
header(&#8216;Content-Length: &#8216;.strlen($client));<br />
echo $client;<br />
}</span></span></p>
<hr />
<p style="text-align: justify;">Saludos de Telepieza</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.telepieza.com%2Fwordpress%2F2009%2F04%2F12%2Fajax-con-jpspan-para-php-4%25c2%25aa-parte%2F&amp;title=Ajax%20con%20JPSpan%20para%20PHP%204%C2%AA%20parte" id="wpa2a_6"><img src="http://www.telepieza.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.telepieza.com/wordpress/2009/04/12/ajax-con-jpspan-para-php-4%c2%aa-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con JPSpan para PHP 3ª parte</title>
		<link>http://www.telepieza.com/wordpress/2009/04/11/ajax-con-jpspan-para-php-3%c2%aa-parte/</link>
		<comments>http://www.telepieza.com/wordpress/2009/04/11/ajax-con-jpspan-para-php-3%c2%aa-parte/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 14:36:58 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JPSpan-Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JPSpan]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.telepieza.com/wordpress/?p=672</guid>
		<description><![CDATA[En la tercera parte de Ajax con JPSpan para PHP, vamos a explicar el funcionamiento del programa jpspan_server.php del servidor. (Abajo les dejo el código de dicho programa). &#60;?php /** * This is a remote script to call from Javascript */ require_once &#8216;../JPSpan.php&#8217;; require_once JPSPAN . &#8216;Server/PostOffice.php&#8217;; define(&#8216;JPSPAN_INCLUDE_COMPRESS&#8217;,FALSE); session.start(); class Customer { public function getMyDatos($tysexo) { [...]]]></description>
			<content:encoded><![CDATA[<p>En la tercera parte de Ajax con JPSpan para PHP, vamos a explicar el funcionamiento del programa jpspan_server.php del servidor. (Abajo les dejo el código de dicho programa).</p>
<hr />&lt;?php<br />
/**<br />
* This is a remote script to call from Javascript<br />
*/<br />
<span style="color: #000000;"><span style="color: #000000;">require_once &#8216;../JPSpan.php&#8217;;<br />
require_once JPSPAN . &#8216;Server/PostOffice.php&#8217;;</span></span><br />
<span style="color: #000000;"><span style="color: #000000;">define(&#8216;JPSPAN_INCLUDE_COMPRESS&#8217;,FALSE);</span></span><br />
<span style="color: #000000;"><span style="color: #000000;">session.start();</span></span><br />
<span style="color: #000000;"><span style="color: #000000;"><span style="color: #993300;">class Customer<br />
</span> {<br />
<span style="color: #993300;">public function getMyDatos($tysexo)<br />
</span> {<br />
$mydatos['sessionid'] = session_id() ;<br />
$mydatos['nombre'] = &#8220;mariano&#8221; ;<br />
$mydatos['empresa'] = &#8220;Telepieza S.A.&#8221; ;<br />
if ($tysexo == &#8220;H&#8221;) $mydatos['tysexo']= &#8220;Hombre&#8221;;<br />
elseif ($tysexo == &#8220;M&#8221; ) $mydatos['tysexo']=&#8217;Mujer&#8217;  ;<br />
else   $mydatos['tysexo'] = &#8216;¿?&#8217;;<br />
return $mydatos ;<br />
}<br />
}</span></span><br />
<span style="color: #000000;"><span style="color: #000000;"> $S = &amp; new JPSpan_Server_PostOffice();<br />
$S-&gt;RequestEncoding = &#8216;php&#8217;;<br />
$S-&gt;addHandler(new Customer());</span></span></p>
<div><span style="color: #000000;"><span style="color: #000000;"> if (isset($_SERVER['QUERY_STRING']) &amp;&amp; strcasecmp($_SERVER['QUERY_STRING'], &#8216;client&#8217;)==0)<br />
{<br />
$S-&gt;displayClient();<br />
} else {<br />
require_once JPSPAN . &#8216;ErrorHandler.php&#8217;;<br />
$S-&gt;serve();<br />
}</span></span></div>
<div><span style="color: #000000;"><span style="color: #000000;"></p>
<hr /></span></span></div>
<p style="TEXT-ALIGN: justify">
<a href="http://www.telepieza.com/wordpress/wp-content/gallery/imagenes/jpspan_03.jpg" title="" class="thickbox" rel="singlepic809" >
	<img class="ngg-singlepic" src="http://www.telepieza.com/wordpress/wp-content/gallery/cache/809__150x125_jpspan_03.jpg" alt="jpspan_03.jpg" title="jpspan_03.jpg" />
</a>
  Las instrucciones <span style="color: #993300;">requiere_once &#8216;../JPSpan.php&#8217; </span> declara la constante JPSPAN, para después utilizarla en la llamada del programa principal que está en la carpeta JPSpan/Server/PostOffice.php de esa forma tiene disponibles las clases necesarias para la comunicación entre el Servidor y el Navegador.</p>
<p>1.- require_once &#8216;../JPSpan.php&#8217;;<br />
2.- require_once JPSPAN . &#8216;Server/PostOffice.php&#8217;;</p>
<p style="TEXT-ALIGN: justify">La variable <span style="color: #993300;">JPSPAN_INCLUDE_COMPRESS</span>, puede ser TRUE o FALSE, sirve para comprimir el programa en javascript generado por el servidor para la comunicación, siempre le indicaremos FALSE, porque la técnica de compresión que tiene JPSpan es muy lenta y come mucho recurso de máquina, no es nada aconsejable colocar en dicha variable TRUE.</p>
<p style="TEXT-ALIGN: justify"><span id="more-672"></span></p>
<p>3.- define(&#8216;JPSPAN_INCLUDE_COMPRESS&#8217;,FALSE);</p>
<p>Arrancamos la sesión de usuario con la instrucción  : <span style="color: #993300;">4.- session.start(); </span>, para después enviar el ID de sessión al navegador.</p>
<p style="TEXT-ALIGN: justify">Definimos nuestra clase, la <span style="color: #993300;">class Customer</span> que si recordáís, es la creada como objeto en javascript  function init() {  remoteCustomer = <span style="color: #993300;">new customer</span>(customerCallback); } <span style="color: #ff0000;"> (Leer la 2ª parte)</span></p>
<p>Mirar sobre todo la concordancia del nombre al crear el objeto en javascript con new customer y la clase del servidor como class Customer.</p>
<p><span style="color: #ff0000;">IMPORTANTE :</span> Cuando se define el objeto y el método en javascript siempre se tiene que colocar en minúsculas (new customer) y en el servidor puede ser el nombre en mayúsculas y minúsculas, ejemplo class Customer.</p>
<p>Una vez creada la clase , creamos la funcion public <span style="color: #993300;">function getMyDatos($tysexo),</span> es la función pública por donde entran los datos de javascript y los que enviaremos nosotros al navegador con la instrucción :  <span style="color: #993300;">return $mydatos ;. </span></p>
<p>En el programa de JavaScript recordar la instrucción :  <span style="color: #993300;">var customerCallback = {    <span style="color: #000080;"><strong>getmydatos</strong></span>:function(mydatos)   {  showDatos(mydatos);  } };</span> .</p>
<p>Fijaros en el nombre de la variable de JavaScript y en la función del servidor son el mismo nombre (<span style="color: #993300;">function <span style="color: #000080;"><strong>getMyDatos</strong></span>) </span>y por dicha coincidencia la comunicación es posible entre el programa de JavaScript y el programa del servidor realizado en PHP.</p>
<p style="TEXT-ALIGN: justify">Las siguientes instrucciones son completar la matriz con el id de sesion_id, con los nombres de campo a enviar , para no complicar el programa, simplemente he colocado constantes de &#8220;mariano&#8221;, &#8220;Telepieza S.A.&#8221; y después realizo una comprobación de la variable (M o H) que envía el navegador para grabar el texto de Mujer o Hombre en la matriz con el índice &#8220;tysexo&#8221; ,</p>
<p><span style="color: #993300;">5.- class Customer<br />
{<br />
public function getMyDatos($tysexo)<br />
</span> {<br />
$mydatos['sessionid'] = session_id() ;<br />
$mydatos['nombre'] = &#8220;mariano&#8221; ;<br />
$mydatos['empresa'] = &#8220;Telepieza S.A.&#8221; ;<br />
if ($tysexo == &#8220;H&#8221;) $mydatos['tysexo']= &#8220;Hombre&#8221;;<br />
elseif ($tysexo == &#8220;M&#8221; ) $mydatos['tysexo']=&#8217;Mujer&#8217;  ;<br />
else   $mydatos['tysexo'] = &#8216;¿?&#8217;;<br />
<span style="color: #993300;">return $mydatos ;<br />
</span> }<br />
}</p>
<hr />En php existen dos tipos de matrices, igual que en JavaScript y son :</p>
<p>- <strong>Indexada:</strong> Aquella cuyo acceso a los elementos se realiza por la posición que ocupan dentro de la estructura (se inician siempre desde la posición 0). Ejemplo: $mymatriz[0].</p>
<p><strong>Asociativa:</strong> Es aquella en la que los elementos están formados por pares clave-valor y el acceso se realiza proporcionando una determinada clave. Ejemplo: $mydatos[tysexo'].</p>
<p style="TEXT-ALIGN: justify">Las utilizadas en el ejemplo del programa servidor en PHP para enviar al programa del Navegador en JavaScript son de tipo Asociativas :</p>
<p>$mydatos['<span style="color: #993300;">sessionid'</span>] = session_id() ;<br />
$mydatos['<span style="color: #993300;">nombre'</span>] = &#8220;mariano&#8221; ;<br />
$mydatos['<span style="color: #993300;">empresa</span>'] = &#8220;Telepieza S.A.&#8221; ;<br />
$mydatos['<span style="color: #993300;">tysexo</span>']=&#8217;Mujer&#8217;  ;</p>
<p style="TEXT-ALIGN: justify">Y las visualizamos de la misma forma en el programa JavaScript del Navegador mediante la instrucción del objeto : document.getElementById :</p>
<p>document.getElementById(&#8220;txtSession&#8221;).value = Mydatos["<span style="color: #993300;">sessionid</span>"];<br />
document.getElementById(&#8220;txtNombre&#8221;).value  = Mydatos["<span style="color: #993300;">nombre</span>"];<br />
document.getElementById(&#8220;txtEmpresa&#8221;).value = Mydatos["<span style="color: #993300;">empresa</span>"];<br />
document.getElementById(&#8216;esSexo&#8217;).innerHTML=Mydatos["<span style="color: #993300;">tysexo</span>"]</p>
<p>Si os dais cuenta lo importante para visualizar los datos es el nombre del indice y no así el nombre de la matriz.</p>
<p>La siguiente instrucción del programa es  :</p>
<p style="TEXT-ALIGN: justify"><span style="color: #993300;"> 6.- $S = &amp; new JPSpan_Server_PostOffice();</span>, creamos una nueva instancia de JPSpan_Server_PostOffice, que es utilizada en todas las aplicaciones de JPSpan y es la responsable de crear los métodos JavaScript del lado del cliente cuyas firmas replican las de la clase Customer.</p>
<p style="TEXT-ALIGN: justify">En lugar de ejecutar estos métodos de forma local, se pasan los argumentos  al servidor utilizando un objeto XmlHttpRequest y los resultados obtenidos se devuelven mediante una respuesta HTTP.</p>
<p style="TEXT-ALIGN: justify">A continuación se pasa la clase Customer a JPSpan_Server_PostOffice a través del método addHander :  <span style="color: #993300;">8.-  $S-&gt;addHandler(new Customer());,</span> ese momento mediante la técnica de reflexión examina nuestra clase de trabajo y crea los esquemas de código JavaScript necesarios para la comunicación.</p>
<p>La instruccion : <span style="color: #993300;">7.- $S-&gt;RequestEncoding = &#8216;php&#8217;;,</span> es la forma a transmitir los datos , pudiendo ser &#8216;xml&#8217;,`&#8217;php&#8217; y &#8216;json&#8217;, por defecto si no le indicamos nada a JPSpan siempre es de tipo  &#8216;php&#8217;.</p>
<p>La siguiente línea del programa es :</p>
<p><span style="color: #993300;">9.- if (isset($_SERVER['QUERY_STRING']) &amp;&amp; strcasecmp($_SERVER['QUERY_STRING'], &#8216;<span style="color: #000080;"><strong>client</strong></span>==0) </span>,  Si existe una cadena de consulta e incluye la clave de nombre <span style="color: #000080;"><strong>client</strong></span>, se llama al método <span style="color: #993300;">10.- displayClient()</span>, que devuelve el código JavaScript al navegador por dicha instrucción.</p>
<p>En el programa de JavaScript <span style="color: #ff0000;">(Explicado en la 2ª parte) </span>la instrucción  <span style="color: #993300;">&lt;script type=”text/javascript” src=”jpspan_server.php?<span style="color: #000080;"><strong>client</strong></span>”&gt;&lt;/script&gt;, <span style="color: #000000;">tiene que concordar con la comparación de <strong><span style="color: #000080;">client</span> </strong>del programa PHP.</span></span></p>
<p>La siguiente instrucción es : <span style="color: #993300;"> 11.-   require_once JPSPAN . &#8216;ErrorHandler.php&#8217;;</span>,  sirve para gestionar errores y la veremos de forma detallada en otro post por tener una gran importancia en JPSpan.</p>
<p>Un Saludo de Telepieza.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.telepieza.com%2Fwordpress%2F2009%2F04%2F11%2Fajax-con-jpspan-para-php-3%25c2%25aa-parte%2F&amp;title=Ajax%20con%20JPSpan%20para%20PHP%203%C2%AA%20parte" id="wpa2a_8"><img src="http://www.telepieza.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.telepieza.com/wordpress/2009/04/11/ajax-con-jpspan-para-php-3%c2%aa-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con JPSpan para PHP 2ª parte</title>
		<link>http://www.telepieza.com/wordpress/2009/04/10/ajax-con-jpspan-para-php-2%c2%aa-parte/</link>
		<comments>http://www.telepieza.com/wordpress/2009/04/10/ajax-con-jpspan-para-php-2%c2%aa-parte/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 00:01:23 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JPSpan-Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JPSpan]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.telepieza.com/wordpress/?p=670</guid>
		<description><![CDATA[En la segunda parte de Ajax con JPSpan, vamos a realizar un programa en el lado del cliente con JavaScript y HTML y en el servidor un programa en PHP. Dichos programas serán muy sencillos, porque mi intención es probar la rápidez del sistema de comunicaciones con JPSpan y después iremos complicando los programas en [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">
<a href="http://www.telepieza.com/wordpress/wp-content/gallery/imagenes/jpspan_02.jpg" title="" class="thickbox" rel="singlepic810" >
	<img class="ngg-singlepic" src="http://www.telepieza.com/wordpress/wp-content/gallery/cache/810__200x250_jpspan_02.jpg" alt="jpspan_02.jpg" title="jpspan_02.jpg" />
</a>
 En la segunda parte de Ajax con JPSpan, vamos a realizar un programa en el lado del cliente con JavaScript y HTML y en el servidor un programa en PHP.</p>
<p style="text-align: justify;">Dichos programas serán muy sencillos, porque mi intención es probar la rápidez del sistema de comunicaciones con JPSpan y después iremos complicando los programas en función de los comentarios y pruebas a realizar.</p>
<p style="text-align: justify;"><strong><span style="text-decoration: underline;"><span style="color: #993300;">La ídea del programa:</span></span></strong> El programa tiene que enviar un campo con un select de M=Mujer y H=Hombre al servidor y este tiene que responder la ID de session del sistema, un nombre y empresa, supuestamente extraido de una Base de Datos y el texto de Hombre o Mujer seleccionado por el Usuario.</p>
<p><strong><span style="text-decoration: underline;"><em>Ejemplo del programa muy Sencillo de Comunicación Ajax con JpSpan</em></span></strong></p>
<p><label>Hombre/Mujer</label></p>
<select multiple="65535" name="txtSexo" size="1">
<option value="M">Mujer</option>
<option value="H">Hombre</option>
</select>
<p><button onclick="fetchMydatos(document.getElementById('txtSexo'));">Enviar</button></p>
<p>Sesion ID :</p>
<input id="txtSession" style="width: 231px; height: 22px;" name="sessionid" size="33" type="text" value="78d4243ac0fb7bdcca7a978a98a9bd3f" />
<p>Nombre :</p>
<input id="txtNombre" style="width: 154px; height: 22px;" name="nombre" size="22" type="text" value="mariano" />
<p>Empresa:</p>
<input id="txtEmpresa" style="width: 157px; height: 22px;" name="empresa" size="23" type="text" value="Telepieza S.A." />
<p><label>El Sexo Seleccionado es : </label><strong><span style="color: #993300;">Mujer</span></strong></p>
<p>El programa en el lado del cliente y realizado en html es :</p>
<hr />&lt;head&gt;<br />
&lt;title&gt;Ejemplo Sencillo de JPSpan&lt;/title&gt;<br />
<span style="color: #993300;">&lt;script type=&#8221;text/javascript&#8221; src=&#8221;jpspan_server.php?client&#8221;&gt;&lt;/script&gt;<br />
</span>&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p><span style="color: #993300;">function init() {<br />
remoteCustomer = new customer(customerCallback);<br />
}</span></p>
<p><span style="color: #993300;">var customerCallback = {<br />
getmydatos:function(mydatos)<br />
{<br />
showDatos(mydatos);<br />
}<br />
</span><span style="color: #993300;">};</span></p>
<p><span style="color: #000080;">function fetchMydatos(tysexo) {<br />
remoteCustomer.getmydatos(tysexo.value);<br />
}</span></p>
<p>function showDatos(Mydatos) {<br />
document.getElementById(&#8220;txtSession&#8221;).value = Mydatos["sessionid"];<br />
document.getElementById(&#8220;txtNombre&#8221;).value  = Mydatos["nombre"];<br />
document.getElementById(&#8220;txtEmpresa&#8221;).value = Mydatos["empresa"];<br />
document.getElementById(&#8216;esSexo&#8217;).innerHTML=Mydatos["tysexo"];<br />
}</p>
<p>&lt;/head&gt;<br />
&lt;body onload=&#8221;init();&#8221;&gt;<br />
&lt;h1&gt;Ejemplo muy Sencillo de Comunicación Ajax con JpSpan&lt;/h1&gt;<br />
&lt;p&gt;&lt;label&gt;Hombre/Mujer&lt;/label&gt;<br />
&lt;select size=&#8221;1&#8243; name=&#8221;txtSexo&#8221;&gt;<br />
&lt;option selected value=&#8221;M&#8221;&gt;Mujer&lt;/option&gt;<br />
&lt;option value=&#8221;H&#8221;&gt;Hombre&lt;/option&gt;<br />
&lt;/select&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;button onClick=&#8221;javascript:fetchMydatos(document.getElementById(&#8216;txtSexo&#8217;));&#8221; &gt;Enviar&lt;/button&gt;&lt;/p&gt;<br />
&lt;p&gt;Sesion ID : &lt;input id=&#8221;txtSession&#8221;  name=&#8221;sessionid&#8221; size=&#8221;55&#8243; type=&#8221;text&#8221;&gt;&lt;/p&gt;<br />
&lt;p&gt;Nombre :&lt;input id=&#8221;txtNombre&#8221; name=&#8221;nombre&#8221;  size=&#8221;55&#8243; type=&#8221;text&#8221;&gt; &lt;/p&gt;<br />
&lt;p&gt;Empresa : &lt;input id=&#8221;txtEmpresa&#8221; name=&#8221;empresa&#8221; size=&#8221;45&#8243; type=&#8221;text&#8221;&gt;&lt;/p&gt;<br />
&lt;label&gt;El Sexo Seleccionado es : &lt;/label&gt;&lt;p id=&#8221;esSexo&#8221;&gt; &lt;/p&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<hr />Vamos a comentar las instrucciones que son esenciales para la conexión del  programa con el servidor PHP:</p>
<p><span id="more-670"></span></p>
<p><strong>La sentencia :</strong></p>
<p><strong> &lt;script type=&#8221;text/javascript&#8221; src=&#8221;jpspan_server.php?<span style="color: #ff0000;">client</span>&#8220;&gt;&lt;/script&gt;</strong></p>
<p><strong> </strong>Indicamos el nombre del programa del servidor php a llamar con la cadena de consulta <span style="color: #ff0000;">client</span>, se le indica que es código javaScript.</p>
<p><strong>La Funcion  :</strong></p>
<p><strong>function init() {<br />
remoteCustomer = new customer(customerCallback);<br />
}</strong></p>
<p style="text-align: justify;">La funcion init() se carga de forma automatica en la etiqueta body con la instruccion onload ejemplo en el programa: <strong>&lt;body onload=&#8221;init();&#8221;&gt;</strong></p>
<p style="text-align: justify;">Dicha funcion inicia una variable objeto customer de rellamada a la funcion customerCallBack, aqui es donde empieza todo el proceso con sus metodos que se llaman al programa jpspan_server.php del servidor y recibimos los datos o mensajes de error.</p>
<p style="text-align: justify;"><span style="color: #800000;"><strong>Un tema muy importante :</strong></span>En javaScript las palabras de las clases y funciones de reflexion con el servidor de PHP, tienen que estar en minúsculas, no así en el lado del servidor, el objeto customer es la clase que tenemos que crear nuestra lógica de programa en el servidor del PHP y puede ser creada como   class Customer {  .</p>
<p style="text-align: justify;">En el post (abajo) he colocado el programa PHP del servidor para que se pueda ver el funcionamiento de los nombres de la clase Customer y la funcion <span style="color: #000000;">getMyDatos.</span></p>
<p style="text-align: justify;">La siguiente instrucción creamos la variable customerCallback con la propiedad getmydatos:function(mydatos).  La propiedad getmydatos es la public function getMyDatos($tysexo) que esta dentro de la clase Customer del programa jpspan_server.php del servidor y como argumeto los datos que vamos a recibir desde el servidor. Una ver recibidos los argumentos pasamos a la funcion <span style="color: #993300;">showDatos(mydatos); </span> para que sean visualizados mediante el objeto document.getElementById();</p>
<p><strong>var customerCallback = {<br />
getmydatos:function(mydatos)<br />
{<br />
showDatos(mydatos);<br />
}<br />
};</strong></p>
<p><span style="color: #800000;"><strong>Nos queda ya sólo comentar La funcion :</strong> </span></p>
<p><strong>function fetchMydatos(tysexo) {<br />
remoteCustomer.getmydatos(tysexo.value);<br />
}</strong></p>
<p style="text-align: justify;">function fechMydatos(tysexto) es llamada cuando el usuario pica el botón enviar, mediante el evento onClik, y a su vez llama al objeto remoteCustomer.getmydatos pasando los datos que deseamos al servidor. Se activa la llamada al programa   <span style="color: #993300;">jpspan_server.php?client , <span style="color: #000000;">una vez terminado el proceso devuelve la informacion por la variable customerCallback <strong>{ getmydatos:function(mydatos) }.<br />
</strong></span></span></p>
<p>El ejemplo de la instrucción evento de ratón onClick es :</p>
<p>&lt;p&gt;&lt;button onClick=&#8221;javascript:fetchMydatos(document.getElementById(&#8216;txtSexo&#8217;));&#8221; &gt;Enviar&lt;/button&gt;&lt;/p&gt;</p>
<p>Una vez explicado todo el proceso vamos a repasar la lógica del programa</p>
<ol style="text-align: justify;">
<li>El usuario selecciona (M = Mujer o H=Hombre) y picar el botón &#8220;ENVIAR&#8221;</li>
<li>Se activa el evento onClick que llama a la funcion fechMydatos, enviando el valor seleccionado por el usuario (M o H).</li>
<li>Se pasa el valor a la propiedad getmydatos del objeto ya creado anteriormente remoteCustomer</li>
<li>Dicho objeto realiza la llamada al programa <span style="color: #993300;">jpspan_server.php?client, <span style="color: #000000;">pasando los datos por POST al servidor</span></span></li>
<li><span style="color: #993300;"><span style="color: #000000;">Una vez procesada la información, son devueltos los datos por  la variable <span style="color: #993300;">getmydatos:function(mydatos)</span></span></span></li>
<li><span style="color: #000000;">y por último enseñamos la información por la funcion <span style="color: #993300;">showDatos(mydatos); </span></span></li>
</ol>
<p>Los datos son recibidos por el programa y los visualizamos por la función :</p>
<p><strong>function showDatos(Mydatos) {<br />
document.getElementById(&#8220;txtSession&#8221;).value = Mydatos["sessionid"];<br />
document.getElementById(&#8220;txtNombre&#8221;).value  = Mydatos["nombre"];<br />
document.getElementById(&#8220;txtEmpresa&#8221;).value = Mydatos["empresa"];<br />
document.getElementById(&#8216;esSexo&#8217;).innerHTML=Mydatos["tysexo"];<br />
}</strong></p>
<p>Lo importante de dicha funcion es la forma de visualizar los datos con el objeto document.getElementByID().value y document.getElementById().innerHTML  la tabla devuelta indexada por los nombres de campos enviados por el servidor.</p>
<p><span style="color: #993300;">Para los programadores de PHP dichas tablas son muy conocidas por estar siempre trabajando con ellas en los programas de PHP.</span>
</p>
<p style="text-align: justify;"><span style="color: #993300;"><span style="color: #000000;">Voy a dejar escrito el programa jpspan_server.php en el lado del servidor y en la siguiente entrega lo explicare, pero es muy importante ver la descripción de la clase Custumer y su funcion getMydatos, porque por ahí se comunican los dos programas y sobre todo mirar los nombres de las clases, funciones y datos para no tener problemas de comunicación entre los dos programas :</span></span></p>
<p><span style="color: #000000;"><span style="color: #993300;"><span style="color: #000000;">El Programa  : jpspan_server.php en el servidor es :</span></span></span></p>
<hr /><span style="color: #000000;">&lt;?php<br />
/**<br />
* This is a remote script to call from Javascript<br />
* @version  $Id: jpspan_server.php 0001 2009-01-01 00:00:00 mariano $<br />
* @package  mvmphp<br />
* @copyright Copyright (C) 2009<br />
* @comment      Server de datos para entornos Ajax<br />
*               Recibir y Enviar información al cliente<br />
*/</span><br />
<span style="color: #000000;"><span style="color: #000000;">require_once &#8216;../JPSpan.php&#8217;;<br />
require_once JPSPAN . &#8216;Server/PostOffice.php&#8217;;</span></span><br />
<span style="color: #000000;"><span style="color: #000000;">define(&#8216;JPSPAN_INCLUDE_COMPRESS&#8217;,FALSE);</span></span><br />
<span style="color: #000000;"><span style="color: #000000;">session.start();</span></span><br />
<span style="color: #000000;"><span style="color: #000000;"><span style="color: #993300;">class Customer<br />
</span> {<br />
<span style="color: #993300;">public function getMyDatos($tysexo)<br />
</span> {<br />
$mydatos['sessionid'] = session_id() ;<br />
$mydatos['nombre'] = &#8220;mariano&#8221; ;<br />
$mydatos['empresa'] = &#8220;Telepieza S.A.&#8221; ;<br />
if ($tysexo == &#8220;H&#8221;) $mydatos['tysexo']= &#8220;Hombre&#8221;;<br />
elseif ($tysexo == &#8220;M&#8221; ) $mydatos['tysexo']=&#8217;Mujer&#8217;  ;<br />
else   $mydatos['tysexo'] = &#8216;¿?&#8217;;<br />
return $mydatos ;<br />
}<br />
}</span></span><br />
<span style="color: #000000;"><span style="color: #000000;"> $S = &amp; new JPSpan_Server_PostOffice();<br />
$S-&gt;RequestEncoding = &#8216;php&#8217;;<br />
$S-&gt;addHandler(new Customer());</span></span><br />
<span style="color: #000000;"><span style="color: #000000;"> if (isset($_SERVER['QUERY_STRING']) &amp;&amp; strcasecmp($_SERVER['QUERY_STRING'], &#8216;client&#8217;)==0)<br />
{<br />
$S-&gt;displayClient();<br />
} else {<br />
require_once JPSPAN . &#8216;ErrorHandler.php&#8217;;<br />
$S-&gt;serve();<br />
}</span></span><br />
<span style="color: #000000;"><span style="color: #000000;">?&gt;</span></span></p>
<hr />Un Saludo de Telepieza.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.telepieza.com%2Fwordpress%2F2009%2F04%2F10%2Fajax-con-jpspan-para-php-2%25c2%25aa-parte%2F&amp;title=Ajax%20con%20JPSpan%20para%20PHP%202%C2%AA%20parte" id="wpa2a_10"><img src="http://www.telepieza.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.telepieza.com/wordpress/2009/04/10/ajax-con-jpspan-para-php-2%c2%aa-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con JPSpan para PHP 1ª parte</title>
		<link>http://www.telepieza.com/wordpress/2009/04/08/ajax-con-jpspan-para-php-1%c2%aa-parte/</link>
		<comments>http://www.telepieza.com/wordpress/2009/04/08/ajax-con-jpspan-para-php-1%c2%aa-parte/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 18:12:42 +0000</pubDate>
		<dc:creator>mariano</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JPSpan-Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JPSpan]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.telepieza.com/wordpress/?p=668</guid>
		<description><![CDATA[Uno de los grandes problemas del protocolo HTTP es que los servidores no pueden conectar con el Cliente (Navegador), si éste no ha pedido una conversación o conexión previa con el servidor de información de Internet. La naturaleza de HTTP en las aplicaciones web, del punto de vista del internauta, se llevan a cabo por acciones [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">
<a href="http://www.telepieza.com/wordpress/wp-content/gallery/imagenes/jpspan_01.jpg" title="" class="thickbox" rel="singlepic811" >
	<img class="ngg-singlepic" src="http://www.telepieza.com/wordpress/wp-content/gallery/cache/811__225x225_jpspan_01.jpg" alt="jpspan_01.jpg" title="jpspan_01.jpg" />
</a>
 Uno de los grandes problemas del protocolo HTTP es que los servidores no pueden conectar con el Cliente (Navegador), si éste no ha pedido una conversación o conexión previa con el servidor de información de Internet.</p>
<p style="text-align: justify;">La naturaleza de HTTP en las aplicaciones web, del punto de vista del internauta, se llevan a cabo por acciones (Eventos) y la aplicación web responde con otra página para enseñar dicha información o solicitar más información al usuario.</p>
<p style="text-align: justify;">En una aplicación Web , cada acción del usuario, por ejemplo hacer un click en un botón de un formulario, genera la recarga de otra página web entera para actualizar la información solicitada y a la vez, muchas veces dicha información precisa de más datos que a su vez, crea frustración por tanta demora entre página y página.</p>
<p style="text-align: justify;">
<a href="http://www.telepieza.com/wordpress/wp-content/gallery/imagenes/ajax_php.gif" title="" class="thickbox" rel="singlepic806" >
	<img class="ngg-singlepic" src="http://www.telepieza.com/wordpress/wp-content/gallery/cache/806__225x95_ajax_php.gif" alt="ajax_php.gif" title="ajax_php.gif" />
</a>
 Pero el mundo de internet está cambiando con la revolución de la WEB 2.0 y la técnica AJAX. Gracias a dicha técnica nos podemos acercar a apliaciones en entorno escritorio, sin la necesidad de recargar páginas enteras, sino partes de ella para visualizar los datos requeridos por el usuario.</p>
<p style="text-align: justify;">Para poder trabajar con AJAX, necesitas dominar las tecnologías de  CSS, HTML, XML, JAVASCRIPT, DHTML y DOM, en el lado del Cliente (Navegador) y en el lado del servidor, puede ser cualquier lenguaje orientado a objetos como (JAVA, PHP, VISUAL, PERL).</p>
<p style="text-align: justify;">La técnica que vamos a explicar con JPSpan, es un marco de trabajo Ajax,  para comunicar y transferir datos en formato (XML, JSON y PHP) con servidores programados en PHP con aplicaciones que en su otro extremo tengan  JAVASCRIPT.</p>
<p style="text-align: justify;">JPSpan es simplemente un integrador de clases entre Javascript y PHP, para que se puedan comunicar entre ellos utilizando una clase PHP la técnica de reflexión.</p>
<p style="text-align: justify;">Para poder conseguir los programas de JPSpan, hay que realizar lo siguiente :</p>
<ol style="text-align: justify;">
<li>Nos descargamos de OpenSource la versión <a href="http://sourceforge.net/project/showfiles.php?group_id=121636" target="_blank">JPSpan 0.4.3</a>, dicha versión tiene un montón de ejemplos y uno de ellos el autocomplete2.html es digno de probar.</li>
<li>La versión que está colgada en OpenSource es muy antigua, para descargar la versión de explotación o programación tenemos que ir al <a href="http://agachi.name/weblog/archives/2006/05/20/jpspan-2-0.htm" target="_blank">blog de Valentin Agachi y recuperar JPSpan 2.0 con JSON</a>, dicha versión no tiene ejemplos, pero es una de las más actualizadas, es del año 2.006 y soporta el navegador Opera 8.5+ en sus comunicaciones.</li>
<li>Una vez recuperado JPSpan, tenemos que leer el artículo de uno de los blog más importantes de habla inglesa sobre AJAX y es <a href="http://blog.joshuaeichorn.com/archives/2005/04/19/ajax-hello-world-with-jpspan/" target="_blank">The weblog of Joshua Eichorn </a></li>
</ol>
<p><span id="more-668"></span></p>
<p style="text-align: justify;">En el blog de Joshua Eichorn nos explica en su post como realizar un pequeño programa en el lado del cliente con Javascript y otro en el lado del servidor con php y su interconexión entre ellos.</p>
<p style="text-align: justify;">En los próximos artículos sobre JPSpan iremos dando más información sobre una de las herramientas más interesantes de comunicación AJAX que existe en el mundo del Open Source para servidores PHP.</p>
<p>Saludos de Mariano.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.telepieza.com%2Fwordpress%2F2009%2F04%2F08%2Fajax-con-jpspan-para-php-1%25c2%25aa-parte%2F&amp;title=Ajax%20con%20JPSpan%20para%20PHP%201%C2%AA%20parte" id="wpa2a_12"><img src="http://www.telepieza.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.telepieza.com/wordpress/2009/04/08/ajax-con-jpspan-para-php-1%c2%aa-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

