json tag archives

JSON et JSONP avec PHP

Voici comment récupérer des données au format JSON en PHP avec JQUery.

JSON (JavaScript Object Notation) est un format de données textuel, générique, dérivé de la notation des objets du langage ECMAScript. Il permet de représenter de l’information structurée. Créé par Douglas Crockford, il est décrit par la RFC 4627 de l’IETF.
Un document JSON ne comprend que deux éléments structurels :

des ensembles de paires nom / valeur ;
des listes ordonnées de valeurs.

Ces mêmes éléments représentent 3 types de données :

des objets ;
des tableaux ;
des valeurs génériques de type tableau, objet, booléen, nombre, chaîne ou null.

Code côté PHP json.php

< ?php header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); $data[1]['id'] = "1"; $data[1]['value'] = "value1"; $data[2]['id'] = "2"; $data[2]['value'] = "value2"; echo json_encode($data); ?>

Page HTML appelant avec JQuery


$.ajax({
url: "json.php",
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: onLoadData
});
function onLoadData(data) {
alert("I load data");
};

JSONP pour JSON with padding (en français, « JSON avec formatage ») est une extension dans laquelle le nom de la fonction de retour est indiqué. L’idée originale proviendrait du blog MacPython en 2005 et est maintenant répandu dans les applications Web 2.0, telle que Google’s toolkit Applications. Des améliorations sont prévues pour y ajouter des arguments.

JSONP utilise des balises de scripts, les appels sont ouverts. Ainsi, JSONP peut être inapproprié pour transporter des informations confidentielles.

Code côté PHP jsonp.php

< ?php header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); $data[1]['id'] = "1"; $data[1]['value'] = "value1"; $data[2]['id'] = "2"; $data[2]['value'] = "value2"; echo $_GET['callback'] . '('.json_encode($data).')'; ?>


$.ajax({
url: "jsonp.php",
contentType: "application/json; charset=utf-8",
dataType: 'jsonp',
success: onLoadData
});
function onLoadData(data) {
alert("I load data");
};

Développement-code     Étiquettes : , , ,

De Flex à PHP via JSON

Pour envoyer des données de FLEX à un serveur PHP on peut utiliser XML ou JSON.
JSON (JavaScript Object Notation) est un format de données générique. Il utilise la notation des objets JavaScript pour transmettre de l’information structurée.

Pour utiliser Json dans Flex il faut tout d’abord récupérer le .swc à mettre dans le dossier lib de votre projet Flex. Ici le lien Adobe Flex coreLib.

Côté PHP si vous avez une version supérieure à 5.2 pas de soucis si non il faudra récupérer le code ici : php-json

Donc dans l’application Flex on aura :

import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import com.adobe.serialization.json.JSON;

Une fonction pour envoyer les data. list de votre dataProvider est encodé via Json en string. Les data sont envoyé via le service sendData.

private function sendPHPData():void
{
var objSend:Object = new Object();
var dataString:String = JSON.encode(list.dataProvider.toArray());
dataString = escape(dataString);
objSend.setTutorials = « true »;
objSend.jsonSendData = dataString;
sendData.send(objSend);
}

et bien sûr :

<mx:HTTPService id=« sendData » url=« sendData.php »

useProxy=« false » method=« GET » resultFormat=« text »

result=« updatedPHPDataResult(event) »>

</mx:HTTPService>

<mx:ArrayCollection id= »myData »></mx:ArrayCollection>

<mx:List id= »list » dataProvider= »{myData} »/>

C’est le code que l’on trouve sur tous les tutoriels. Malheureusement il ne fonctionne pas toujours. J’ai essayé pendant plusieurs jours sur IE7 explorer 7 de transférer des data et curieusement au bout d’un certain nombre de données aucun appel au script PHP. Il y a donc un problème de mémoire cache. Je conseille donc de ne pas utiliser GET mais POST.

Le code PHP :

<?php

if (isset($_REQUEST[‘jsonSendData’])) $jsonString = $_REQUEST[‘jsonSendData’];

$jsonString = urldecode($jsonString);

$data = json_decode($jsonString, true);
print_r($data);

?>

Flex     Étiquettes : , ,