El uso de dicho método es algo confuso, debido fundamentalmente a que este método “no hace” sino que “escribe”. Esto quiere decir que cuando el método se invoca lo que calcula es la sentencia javascript necesaria para hacer una invocación Ajax.
Esto es así porque dicho método es un método PHP, es decir, de servidor y las invocaciones Ajax solo tienen sentido en cliente, sin embargo cuando queremos que la llamada tenga en cuenta datos de servidor, o simplemente no queremos adentrarnos en los conocimientos necesarios para hacer esto utilizando tecnología se cliente, por ejemplo JQuery, entonces es perfecto.
Demo
Para ilustrar este concepto vamos a hacer una pequeña demo de una aplicación que actualice un edit con el contenido de otro utilizando Ajax.
1 Para empezar en HTML5 Builder creemos una nueva aplicación de servidor:
2 En el formulario principal depositemos dos edit y un button:
3 Establezcamos las propiedades ButtonType del Button a btNormal y UseAjax del formulario a true:
4 En la vista de código crear el siguiente método
function Actualizar($sender, $params)
{
$this->Edit2->Text = $params[0];
}
5 Asociar al evento javascript del Button OnClick el siguiente código:
function Button1JSClick($sender, $params)
{
echo “params = [ $(‘#Edit1’).val() ];”;
echo $this->Edit1->ajaxCall(“Actualizar”);
?>
//begin js
//end
}
6 Ejecutar y probar
Conclusiones
Como se puede comprobar la manera de pasar los parámetros es bastante peculiar, es necesario inyectar una instrucción javascript que introduzca el valor del edit en un array llamado params. La razón es bien simple cuando la instrucción echo del AjaxCall se ejecute inyectará en la página la siguiente instrucción javascript:
xajax_ajaxProcess(‘Page1′,’Edit1′,params,’Actualizar’,xajax.getFormValues(‘Page1’),[]);
Como se puede ver esta instrucción está enviando una variable llamada params que es la que nosotros cargamos.
Es importante reseñar también en el método php AjaxCall tiene también un segundo parámetro $phpParameters, que no hay que confundir con los parámetros anteriores ya que no son lo mismo.