Qu'est-ce que JSONP ?
La chose importante à retenir avec jsonp est qu'il ne s'agit pas réellement d'un protocole ou d'un type de données. C'est juste un moyen de charger un script à la volée et traiter le script qui est introduit dans la page. Dans l'esprit de JSONP, cela signifie introduire un nouvel objet javascript du serveur dans l'application cliente/ script.
Quand JSONP est-il nécessaire ?
Il s'agit d'une méthode permettant à un domaine d'accéder aux données d'un autre dans la même page ou de les traiter de manière asynchrone. Principalement, il est utilisé pour remplacer les restrictions CORS (Cross Origin Resource Sharing) qui se produiraient avec une requête XHR (ajax). Les chargements de script ne sont pas soumis aux restrictions CORS.
Comment cela se passe-t-il ?
L'introduction d'un nouvel objet javascript à partir du serveur peut être mise en œuvre de plusieurs façons, mais la pratique la plus courante consiste à ce que le serveur exécute une fonction "callback", à laquelle est passé l'objet requis. La fonction de rappel est simplement une fonction que vous avez déjà mise en place sur le client, qui le script vous chargez les appels au point le script pour traiter les données qui lui sont transmises.
Exemple :
J'ai une application qui enregistre tous les objets se trouvant au domicile d'une personne. Mon application est configurée et je veux maintenant récupérer tous les objets qui se trouvent dans la chambre principale.
Ma demande est sur app.home.com
. Les apis dont j'ai besoin pour charger les données se trouvent à l'adresse suivante api.home.com
.
À moins que le serveur ne soit explicitement configuré pour l'autoriser, je ne peux pas utiliser ajax pour charger ces données, car même les pages situées sur des sous-domaines distincts sont soumises à des restrictions XHR CORS.
Idéalement, configurez les choses de manière à permettre le XHR du domaine x.
Idéalement, puisque l'api et l'application sont sur le même domaine, je pourrais avoir accès à la configuration des en-têtes sur api.home.com
. Si je le fais, je peux ajouter un Access-Control-Allow-Origin:
élément d'en-tête donnant accès à app.home.com
. En supposant que l'en-tête est configuré comme suit : Access-Control-Allow-Origin: "http://app.home.com"
Cette méthode est beaucoup plus sûre que la mise en place de JSONP. La raison en est que app.home.com
peut obtenir tout ce qu'il veut de api.home.com
sans api.home.com
donnant à CORS un accès à l'ensemble de l'internet.
La solution XHR ci-dessus n'est pas possible. Configurer JSONP sur mon client script : J'ai mis en place une fonction pour traiter la réponse du serveur lorsque je fais la demande d'accès au serveur. Appel JSONP. :
function processJSONPResponse(data) {
var dataFromServer = data;
}
Le serveur devra être configuré pour renvoyer un mini script ressemblant à quelque chose comme "processJSONPResponse('{"room":"main bedroom","items":["bed","chest of drawers"]}');"
Il pourrait être conçu pour retourner une telle chaîne si quelque chose comme //api.home.com?getdata=room&room=main_bedroom
s'appelle.
Ensuite, le client configure une balise script comme telle :
var script = document.createElement('script');
script.src = '//api.home.com?getdata=room&room=main_bedroom';
document.querySelector('head').appendChild(script);
Ceci charge le script et appelle immédiatement window.processJSONPResponse()
comme écrit/écho/imprimé par le serveur. Les données transmises en tant que paramètre de la fonction sont maintenant stockées dans le fichier dataFromServer
variable locale et vous pouvez en faire ce que vous voulez.
Nettoyer
Une fois que le client dispose des données, c'est-à-dire immédiatement après que le script a été ajouté au DOM, l'élément script peut être retiré du DOM :
script.parentNode.removeChild(script);
0 votes
Duplication possible de Aide sur la création et le traitement des requêtes jsonp en utilisant JAVASCRIPT