Richieste XMLHttpRequest con JSON e PHP

json_e_php

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

pdf

No related posts.

Articoli correlati elaborati dal plugin Yet Another Related Posts.

Tags:

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 »

    Leave a Reply