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).


<?php
/**
* This is a remote script to call from Javascript
*/
require_once ‘../JPSpan.php’;
require_once JPSPAN . ‘Server/PostOffice.php’;

define(‘JPSPAN_INCLUDE_COMPRESS’,FALSE);
session.start();
class Customer
{
public function getMyDatos($tysexo)
{
$mydatos[‘sessionid’] = session_id() ;
$mydatos[‘nombre’] = «mariano» ;
$mydatos[‘empresa’] = «Telepieza S.A.» ;
if ($tysexo == «H») $mydatos[‘tysexo’]= «Hombre»;
elseif ($tysexo == «M» ) $mydatos[‘tysexo’]=’Mujer’  ;
else   $mydatos[‘tysexo’] = ‘¿?’;
return $mydatos ;
}
}

$S = & new JPSpan_Server_PostOffice();
$S->RequestEncoding = ‘php’;
$S->addHandler(new Customer());

if (isset($_SERVER[‘QUERY_STRING’]) && strcasecmp($_SERVER[‘QUERY_STRING’], ‘client’)==0)
{
$S->displayClient();
} else {
require_once JPSPAN . ‘ErrorHandler.php’;
$S->serve();
}


  Las instrucciones requiere_once ‘../JPSpan.php’ 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.

1.- require_once ‘../JPSpan.php’;
2.- require_once JPSPAN . ‘Server/PostOffice.php’;

La variable JPSPAN_INCLUDE_COMPRESS, 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.

3.- define(‘JPSPAN_INCLUDE_COMPRESS’,FALSE);

Arrancamos la sesión de usuario con la instrucción  : 4.- session.start(); , para después enviar el ID de sessión al navegador.

Definimos nuestra clase, la class Customer que si recordáís, es la creada como objeto en javascript  function init() {  remoteCustomer = new customer(customerCallback); }  (Leer la 2ª parte)

Mirar sobre todo la concordancia del nombre al crear el objeto en javascript con new customer y la clase del servidor como class Customer.

IMPORTANTE : 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.

Una vez creada la clase , creamos la funcion public function getMyDatos($tysexo), es la función pública por donde entran los datos de javascript y los que enviaremos nosotros al navegador con la instrucción :  return $mydatos ;.

En el programa de JavaScript recordar la instrucción :  var customerCallback = {    getmydatos:function(mydatos)   {  showDatos(mydatos);  } }; .

Fijaros en el nombre de la variable de JavaScript y en la función del servidor son el mismo nombre (function getMyDatos) y por dicha coincidencia la comunicación es posible entre el programa de JavaScript y el programa del servidor realizado en PHP.

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 «mariano», «Telepieza S.A.» 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 «tysexo» ,

5.- class Customer
{
public function getMyDatos($tysexo)
{
$mydatos[‘sessionid’] = session_id() ;
$mydatos[‘nombre’] = «mariano» ;
$mydatos[‘empresa’] = «Telepieza S.A.» ;
if ($tysexo == «H») $mydatos[‘tysexo’]= «Hombre»;
elseif ($tysexo == «M» ) $mydatos[‘tysexo’]=’Mujer’  ;
else   $mydatos[‘tysexo’] = ‘¿?’;
return $mydatos ;
}
}


En php existen dos tipos de matrices, igual que en JavaScript y son :

Indexada: 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].

Asociativa: 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’].

Las utilizadas en el ejemplo del programa servidor en PHP para enviar al programa del Navegador en JavaScript son de tipo Asociativas :

$mydatos[‘sessionid’] = session_id() ;
$mydatos[‘nombre’] = «mariano» ;
$mydatos[‘empresa‘] = «Telepieza S.A.» ;
$mydatos[‘tysexo‘]=’Mujer’  ;

Y las visualizamos de la misma forma en el programa JavaScript del Navegador mediante la instrucción del objeto : document.getElementById :

document.getElementById(«txtSession»).value = Mydatos[«sessionid«];
document.getElementById(«txtNombre»).value  = Mydatos[«nombre«];
document.getElementById(«txtEmpresa»).value = Mydatos[«empresa«];
document.getElementById(‘esSexo’).innerHTML=Mydatos[«tysexo«]

Si os dais cuenta lo importante para visualizar los datos es el nombre del indice y no así el nombre de la matriz.

La siguiente instrucción del programa es  :

6.- $S = & new JPSpan_Server_PostOffice();, 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.

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.

A continuación se pasa la clase Customer a JPSpan_Server_PostOffice a través del método addHander :  8.-  $S->addHandler(new Customer());, 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.

La instruccion : 7.- $S->RequestEncoding = ‘php’;, es la forma a transmitir los datos , pudiendo ser ‘xml’,`’php’ y ‘json’, por defecto si no le indicamos nada a JPSpan siempre es de tipo  ‘php’.

La siguiente línea del programa es :

9.- if (isset($_SERVER[‘QUERY_STRING’]) && strcasecmp($_SERVER[‘QUERY_STRING’], ‘client==0) ,  Si existe una cadena de consulta e incluye la clave de nombre client, se llama al método 10.- displayClient(), que devuelve el código JavaScript al navegador por dicha instrucción.

En el programa de JavaScript (Explicado en la 2ª parte) la instrucción  <script type=”text/javascript” src=”jpspan_server.php?client”></script>, tiene que concordar con la comparación de client del programa PHP.

La siguiente instrucción es :  11.-   require_once JPSPAN . ‘ErrorHandler.php’;,  sirve para gestionar errores y la veremos de forma detallada en otro post por tener una gran importancia en JPSpan.

Un Saludo de Telepieza.