Depuis quelques années, on entend parler de plus en plus de web 2.0, de AJAX et de JSON pour créer des applications web plus riches et interactives. Le principe est qu'on initie une requête AJAX (Asynchronous JavaScript and XML) et on reçoit la réponse en XML ou encore en JSON (JavaScript Object Notation) à partir de laquelle on peut rafraîchir une portion du contenu de la page.
À la base, un objet JSON peut ressembler à quelque chose comme ceci:
{ "site" : "http://code18.blogspot.com" }
Lorsque les données proviennent d'une base de données, j'ai remarqué que plusieurs programmeurs construisaient l'objet JSON à partir du recordset en effectuant une boucle sur les enregistrements, en utilisant des conditions pour savoir à quel moment utiliser le bris de séquence pour ajouter une virgule ou une accolade.
Or, il existe un petit truc qui peut nous simplifier la vie : transformer le résultat d'une requête SQL directement en JSON.
Pour ce faire, vous aurez besoin au minimum de PHP 5.2 et de l'extension l'extension JSON de PECL (à faire installer par votre administrateur réseau préféré si ce n'est pas déjà fait). Pour savoir si elle est installée, faites afficher phpinfo() et repérez l'entête JSON (json support doit être à "enabled"). Et attention, les valeurs doivent obligatoirement être encodées en UTF-8, autrement vous aurez des problèmes avec les accents.
Ce snippet de code PHP récupère de la base de données la liste des villes :
try {$json_output contiendra alors ceci (un array d'objets contenant le nom de la ville et son ID) :
$dbh = new PDO('pgsql:host=server;dbname=utf8_database','usr','pwd');
$rs = $dbh->query('SELECT * FROM cities');
$obj = $rs->fetchAll();
// conversion en json
$json_output = json_encode($obj);
}
catch(PDOException $e) {
echo $e->getMessage();
}
[Ensuite, on utilise la variable PHP $json_output pour remplir une liste déroulante :
{"city":"Montr\u00e9al","0":"Montr\u00e9al","city_id":1},
{"city":"Toronto","0":"Toronto","city_id":2},
{"city":"Vancouver","0":"Vancouver","city_id":3}
]
function onLoad() {Si vous avez des accents, vous remarquerez dans le code souce que le texte, par exemple "Montréal", sera converti en UTF-8 en "Montr\u00e9al". C'est normal et JavaScript sera capable d'afficher correctement le texte dans la liste déroulante (inspectez-le avec Firebug et vous verrez que tout s'est déroulé normalement).
var obj = <?php echo $json_output; ?>
for (i in obj) {
var new_option = new Option( obj[i].city, obj[i].city_id );
document.getElementById('mySelectBox').options.add(new_option);
}
}
En conclusion : un code beaucoup plus facile à lire, sans se casser la tête avec les détails. Pour en connaître davantage, voici une bonne référence JSON.