JSONP : exemple de requête cross-domain avec PHP et jQuery

Logo JSONLe format JSON permet de représenter des données, il est beaucoup utilisé pour l’échange d’informations. De la même manière qu’avec le XML, les données sont structurées et typées.

Il est possible très facilement de renvoyer du JSON en PHP avec la fonction json_encode, de récupérer ces données en Ajax pour les manipuler en JavaScript puis les afficher en HTML à l’utilisateur.

A savoir, par défaut une requête cross-domain (entre 2 domaines différents) échouera pour des raisons de sécurité.

Avec la deuxième version du XHR, il est possible d’y parvenir en ajoutant un entête Access-Control-Allow-Origin côté serveur, qui permet de spécifier un ou plusieurs domaines autorisés à appeler la ressource.

Exemple en PHP :

header('Access-Control-Allow-Origin: http://site-de-confiance.com');

Fonctionnement avec JSONP

Il est possible de renvoyer les données au format JSONP, en encapsulant celles-ci dans une fonction callback.

Concrètement, voici ce qu’on aura côté client, avec une requête Ajax effectuée en jQuery :

$.ajax({
    url: 'http://serveur.com/api/json',
    type: 'GET',
    jsonpCallback: 'callback',
    dataType: 'jsonp',
    success: function(data) { console.log(data); },
    error: function() { alert('bazinga!'); }
});

Et côté serveur, la page qui présente les données :

$data = array('foo' => 'bar');
if (isset($_GET['callback'])) {
    header('Content-type: application/json; charset=UTF-8');
    echo $_GET['callback'] . '(' . json_encode($data) . ')';
}

Voila un exemple simple et fonctionnel pour effectuer une requête cross-domain avec le format JSONP.

Share Button

Laisser un commentaire.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.