Helper ajax_link
El helper ajax_link tiene la misma funcionalidad que el helper link que sirve para generar links válidos dentro de una aplicación Yupp, pero con ajax_link el pedido es enviado mediante un request Ajax y el resultado debe ser procesado desde Javascript.Para enviar el request Ajax se utiliza la libreria Prototype. El uso de este helper garantiza urls bien formadas, además inyecta todo el Javascript necesario para que funcione el pedido Ajax, siendo responsabilidad del usuario incluir la librería Protoype y la función para manejar la respuesta obtenida del servidor.
Los parámetros los recibe mediante un array asociativo por claves que son:
- component
- Nombre del componente donde está la acción que se quiere ejecutar. Es un parámetro opcional, si no se pasa, se toma el componente actual.
- controller
- Nombre del controlador que contiene la acción. Es un parámetro opcional, si no se pasa, se toma el controller actual.
- action
- Nombre de la acción a ejecutar. Es un parámetro obligatorio.
- body
- Es el texto que se muestra en el link. Es un parámetro obligatorio.
- before
- Nombre de la función Javascript que se invoca antes de enviar el pedido Ajax. (la debe implementar el usuario)
- after
- Nombre de la función Javascript que se invoca después de enviar el pedido Ajax. (la debe implementar el usuario)
<?php echo Helpers::ajax_link( array( "component" => "blog",
"controller" => "comentario",
"action" => "entradaBlog",
"id" => $entrada->getId(),
"body" => "Obtener comentarios por Ajax",
"after" => "after_function",
"before" => "before_function" ) ); ?>
"controller" => "comentario",
"action" => "entradaBlog",
"id" => $entrada->getId(),
"body" => "Obtener comentarios por Ajax",
"after" => "after_function",
"before" => "before_function" ) ); ?>
Teniendo el siguiente Javascript:
<script type="text/javascript" src="/yupp_dir/js/prototype-1.6.0.2.js"></script>
<script type="text/javascript">
var before_function = function(req, json) {
alert("Cargando...");
}
var after_function = function(req, json) {
if (!json) json = req.responseText.evalJSON();
else json = json.evalJSON();
alert("Respuesta: " + json);
}
</script>Se genera el siguiente código HTML/JS:
<script type="text/javascript">
function ajax_link_0()
{
new Ajax.Request('/yupp_dir/blog/entradaBlog/getCommentsJSON?id=1',
{
onLoading: before_function,
onSuccess: after_function
}
);
}
</script>
<a href="javascript:ajax_link_0()" target="_self">Obtener comentarios por Ajax</a>