Richieste XMLHttpRequest con JSON e PHP
Posted by Santarelli Luca | Filed under Programmazione Web

Nativamente in version >= di PHP5.x abbiamo 2 costrutti per manipolare gli oggetti di tipo JSON
- json_encode( mixed value ) che si occupa di trasformare un valore PHP nella stringa JSON che lo rappresenta;
- json_decode( string json [, bool assoc] ) che invece effettua l’operazione contraria trasformando una stringa JSON in un valore PHP valido;
Entrambe le funzioni si aspettano che le stringhe in input siano codificate in UTF8, dato che questo set di caratteri è quello standard utilizzato da JavaScript per l’invio e l’interpretazione delle stringhe; per questo motivo è sempre buona norma applicare alle stringhe in input la funzione utf8_encode affinchè la rappresentazione ottenuta non sia una stringa vuota o comunque una stringa non corretta.
Come primo elemento procuratevi la libreria per codificare le richieste dal sito ufficiale di json.
Costruzione del XMLHTTPRequest
Vediamo cosa andare a scrivere per preparare e incapsulare la richiesta dal lato client:
function req(method, data, callback)
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4)
callback(xmlhttp.responseText.parseJSON());
}xmlhttp.open(”POST”, “nomescript.php?action=” + method, true);
xmlhttp.send((data == null ? “” : data.toJSONString()));
}function dopo la chiamata fai(response del server)
{manipola response
}
function load()
{
req(”loadCart”, null, function(cart)
{
dopo la chiamata fai(response dal server);
});
}document.onload= load();
Questo è il tipo di richiesta generico, potete cambiarla come volete, ovviamente dovrete associarvi un documento html, sostituendo i tag con quelli che vorrete.
Dal lato server vediamo lo script php cosà farà
<?php
class Nomeclasse
{
private nomeMetodo;public function __construct(<[parametri]>)
{
$this->nomemetodo = <[parametri]>;}
}
Per prima cosa ci dobbiamo costruire una classe che contenga tutto ciò di cui abbiamo bisogno, per questo implementiamo una classe generica, e un costruttore. successivamente possiamo implementare diverse funzioni, come ad esempio:
public function charge(<[parametri]>)
{
$this->nomemetodo=<[parametri]>;
}
Cosi a grandi linee, qui ci possono essere numerose operazione, e complicazione, all’utente la personalizzazione, ma adesso diamo uno sguardo interessante sul vero lavoro da fare quando arriva la richiesta:
$json = json_decode($data);
$classe = new Nomeclasse(<[parametri]>);
$classe->charge($json-><[nomecampo]>);echo json_encode(Risultato della manipolazione dell’oggetto, come ad esempio una get della classe);
Da qui abbiamo dati manipolati con php usabili da json, e la richiesta e finita e rispedita al client, come potete vedere si possono avere delle manipolazioni anche complesse, con oggetti, funzioni, il tutto restituito al client sotto forma di stringa, fenomenale no, non è più una semplice richiesta ajax, ma un risultato complesso e ricco di informazioni, che possiamo modellare come vogliamo sul client
No related posts.
Articoli correlati elaborati dal plugin Yet Another Related Posts.
Tags: Ajax/Json
Scritto da Santarelli Luca lunedì, 9th febbraio , 2009 19:06 Letture:« JSON, La rivoluzione WEB è alle porte | JSONP e le Same Domain Policy, la Soluzione »
blogflux