Chiamata ajax (json_encode) in Symfony

In questo esempio vi mostrerò come effettuare una chiamata in AJAX in modo tale da modificare (mostrato in questo esempio) un immagine

se per esempio vogliamo rendere un valore di una riga visibile/non visibile modificando il campo ‘visible’ della nostra tabella.
Tabella

tabella:
id: ~
visible: { type: BOOLEAN, size: ‘1’, required: true, default: 0 }
name: { type: VARCHAR, size: ‘255’, required: true }

Script ajax con chiamata in JSON che effettau un cambio della classe ‘visible_on/visible_off’ dopo un evento click.
Queste due classi hanno un immagine di sfondo, in questo modo, dopo aver effettuato il click sul tag con classe ‘object_visible’
avverrà un cambio di classe al tag con id ‘visible_[id]’.

<script type=”text/javascript”>

$(function() {

$(‘.object_visible’).click(function() {

$.getJSON($(this).attr(‘href’), function(data) {

if ( data.visible == false) {
$(‘#visible_’+data.id).removeClass(‘visible_on’);
$(‘#visible_’+data.id).addClass(‘visible_off’);

} else {
$(‘#visible_’+data.id).removeClass(‘visible_off’);
$(‘#visible_’+data.id).addClass(‘visible_on’);
}

});

return false;

});

});
</script>

<a href=”tabella/ChangeVisible/id/8″ title=”Clicca per cambiare lo stato” name=”object_visible” class=”object_visible” >
<img src=”images/spacer.gif” width=”32″ height=”32″ class=”visible_on” id=”visible_<?php echo $object->getId() ?>”/>
</a>

L’immagine ‘spacer.gif’ è un immagine di 1×1 pixel, mentre, come detto sopra, ogni classe ha un immagine associata,
con il cambio di classe abbiamo anche il cambio di immagine.

Questo è quello che accade nell’action richiamata dal tag a.

  1. L’action recupera le informazioni relative alla riga della nostra ‘tabella’ tramite l’id ($request->getParameter(‘id’))
  2. Viene modificato il valore del campo visible, se è visible ( = 1) viene settato a 0 e viceversa.
  3. Viene effettuato un redirect ad ‘table/index’ dove vengono passati in json_encode il nuovo valore ‘visible’ e l’id della riga appena modificata. I valori verranno usati dallo script che effettuera dei controlli e modificherà le classi del tag html relativo con ID “visible_’+data.id'” (vedere script sopra).

public function executeChangeVisible(sfWebRequest $request)
{

if ($request->isXmlHttpRequest())
{

$id = 0;
$visible = 0;

$table = TabellaPeer::retrieveByPK($request->getParameter(‘id’));

if ( $table->getVisible() == 0) {
$table->setVisible(1);
} else {
$table->setVisible(0);
}

$table->save();

$id = $table->getId();
$visible = $table->getVisible();

$this->getResponse()->setContentType(“application/json; charset=utf-8”);
$this->renderText(json_encode(array(‘visible’ => $visible, ‘id’ => $id)));

return sfView::NONE;

}

$this->redirect(‘table/index’);

}

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...