Comportamientos AJAX
Toba brinda una API para poder hacer llamadas asincrónicas al servidor
desde javascript (llamado popularmente como AJAX). Sólo es necesario
publicar el método en php precedido por ajax__
(por ejemplo
ajax__nombre_metodo
) y elegir una forma de invocarlo: ajax
,
ajax_html
o ajax_cadenas
explicadas en esta página.
API de pasaje de datos
La forma más sencilla que puede tomar un comportamiento es el pasaje de datos Javascript --> PHP --> Javascript. Similar a la llamada de un método Javascript invoca al servidor con parámetros y este retorna una estructura de datos. Para este fin el CI en javascript tiene un método this.ajax(metodo, parametros, clase_js, funcion_js, contexto_js)
Por ejemplo se puede atrapar un evento en javascript (en este caso
accion
), hacer el pedido asincrónico de datos mi_comportamiento
recibiéndolos en el método atender_respuesta
de javascript. Del lado
del servidor se esucha el mi_comportamiento
y se construye la
respuesta en base a una estructura de datos:
#Código Javascript en el método extender_objeto_js de la pantalla/ci
{$this->objeto_js}.evt__form__accion = function() {
var parametros = [];
this.ajax('mi_comportamiento', parametros, this, this.atender_respuesta);
return false;
}
{$this->objeto_js}.atender_respuesta = function(datos)
{
alert(datos);
}
#Código PHP en el CI
<?php
function ajax__mi_corportamiento($parametros, toba_ajax_respuesta $respuesta)
{
$estructura = array(...);
$respuesta->set($estructura);
}
?>
API para cambiar HTML en forma remota
Cuando el comportamiento consiste en buscar un HTML e insertarlo en la
página actual existe un método
this.ajax_html(metodo, parametros, nodo_html).
En este caso se pide a un 'metodo' en php que retorne el html que será
reemplazado en el nodo_html
#Código Javascript en el método extender_objeto_js de la pantalla/ci
{$this->objeto_js}.evt__form__accion = function() {
var parametros = [];
this.ajax_html('mi_comportamiento', parametros, this.nodo_pie());
return false;
}
#Código PHP en el CI
<?php
function ajax__mi_corportamiento($parametros, toba_ajax_respuesta $respuesta)
{
$respuesta->set('<strong>Respuesta HTML</strong>');
}
?>
API de pasaje de strings
Esta API existe solo por motivo de eficiencia, se utiliza cuando
necesitamos intercambiar mucha información plana, sin interpretación
entre servidor y cliente. Aunque también es posible utilizar el método
general ajax este nuevo método
this.ajax_cadenas(metodo, parametros, clase_js, funcion_js, contexto_js)
tiene un menor overhead ya que no intenta interpretar los tipos de
datos. Para facilitar el pasaje se brinda una api de manejo de
colecciones con el método php agregar_cadena(clave,valor)
y con el
método javascript get_cadena(clave)
:
#Código Javascript en el método extender_objeto_js de la pantalla/ci
{$this->objeto_js}.evt__form__accion = function() {
var parametros = [];
this.ajax_cadenas('mi_comportamiento', parametros, this, this.atender_respuesta);
return false;
}
{$this->objeto_js}.atender_respuesta = function(respuesta) {
var param1 = respuesta.get_cadena('param1');
var param2 = respuesta.get_cadena('param2'));
var param3 = respuesta.get_cadena('param3'));
}
#Código PHP en el CI
<?php
function ajax__mi_comportamiento($parametros, toba_ajax_respuesta $respuesta)
{
$respuesta->agregar_cadena('param1', 'Este es el primer parámetro');
$respuesta->agregar_cadena('param2', 'Este es el segundo parámetro');
$respuesta->agregar_cadena('param3', 'Este es el tercer parámetro');
}
?>
Ejemplos
Existe ejemplos en el proyecto de Referencia, Carpeta Varios.