C'est en fait pas trop compliqué...
Dire que vous êtes sur le domaine abc.com et vous souhaitez faire une demande d'domaine xyz.com. Pour ce faire, vous avez besoin de franchir les limites d'un domaine, d'un non-non dans la plupart des browserland.
Le seul élément qui contourne cette limitation est les balises <script>. Lorsque vous utilisez une balise de script, le domaine de la limitation est ignoré, mais dans des circonstances normales, vous ne pouvez pas vraiment FAIRE n'importe quoi avec les résultats, le script est juste évalués.
Entrez JSONP. Lorsque vous faites votre demande à un serveur qui est JSONP activé, vous passez un paramètre spécial qui indique au serveur un peu plus sur votre page. De cette façon, le serveur est en mesure de bien envelopper sa réponse de manière à ce que votre page peut gérer.
Par exemple, dire que le serveur attend un paramètre appelé "rappel" pour permettre à ses JSONP capacités. Ensuite, votre demande pourrait ressembler à:
http://www.xyz.com/sample.aspx?callback=mycallback
Sans JSONP, ce qui pourrait renvoyer le code JavaScript de base de l'objet, comme suit:
{ foo: 'bar' }
Cependant, avec JSONP, lorsque le serveur reçoit le "rappel" de paramètre, il s'enroule le résultat un peu différemment, de retour quelque chose comme ceci:
mycallback({ foo: 'bar' });
Comme vous pouvez le voir, il faudra désormais appeler la méthode que vous avez spécifié. Donc, dans votre page, vous définissez la fonction de rappel:
mycallback = function(data){
alert(data.foo);
};
Et maintenant, quand le script est chargé, il va être évalué, et votre fonction sera exécutée. Voila, la croix-domaine de demandes de!
Il est également intéressant de noter que l'un des principaux problèmes avec JSONP: vous perdez beaucoup de contrôle de la demande. Par exemple, il n'y a pas de "gentil", de façon à obtenir une défaillance des codes de retour. Comme un résultat, vous vous retrouvez à l'aide de chronomètres pour suivre la demande, etc, ce qui est toujours un peu suspect. La proposition de JSONRequest est une excellente solution pour permettre à la croix-domaine de script, le maintien de la sécurité, et de permettre un contrôle de la demande.