Maison  >  Article  >  développement back-end  >  Analyse PHP des problèmes inter-domaines Ajax

Analyse PHP des problèmes inter-domaines Ajax

小云云
小云云original
2018-03-09 13:06:481210parcourir

En fait, il existe de nombreuses explications sur JSONP sur Internet, mais elles sont toutes identiques et vagues. C'est un peu difficile à comprendre pour beaucoup de gens qui débutent dans ce domaine, mais je. essayez d'expliquer ce problème à ma manière. Voyez si cela aide. Cet article partage principalement avec vous l'analyse de PHP sur les problèmes inter-domaines ajax, dans l'espoir d'aider tout le monde.

1. Un problème bien connu, la requête directe Ajax pour les fichiers ordinaires présente le problème de l'accès non autorisé entre domaines, que vous soyez une page statique, une page Web dynamique, un service Web, WCF, tant comme il s'agit d'une requête inter-domaines, elle ne sera pas précise ;

2. Cependant, nous avons également constaté que lors de l'appel de fichiers js sur une page Web, cela n'est pas affecté par le fait qu'il s'agisse d'une requête inter-domaines (non). seulement cela, nous avons également constaté que toutes les balises avec l'attribut "src" ont des capacités inter-domaines, telles que 3f1c4e4b6b16bbbd69b2ee476dc4f83a, a1f02c36ba31691bcfe87b2722de723b, d5ba1642137c3f32f4f4493ae923989c);

3. On peut juger que si vous souhaitez utiliser le côté Web pur (contrôle ActiveX, proxy côté serveur, etc.) au stade actuel, cela appartient au futur. Il n'y a qu'une seule possibilité d'accéder aux données entre domaines (à l'exclusion de HTML5 Websocket et autres méthodes), et c'est essayer de charger les données dans un fichier au format js sur le serveur distant pour l'appel du client et un traitement ultérieur

4. Nous savons déjà qu'il existe un format de données de caractères purs appelé JSON qui peut décrire des données complexes de manière concise. Ce qui est encore mieux, c'est que JSON est également pris en charge nativement par js, afin que le client puisse traiter les données dans ce format presque comme il le souhaite

5. . Le client Web appelle le fichier au format js généré dynamiquement sur le serveur inter-domaines (généralement avec JSON comme suffixe) exactement de la même manière que l'appel du script. Il est évident que la raison pour laquelle le serveur génère dynamiquement un fichier JSON. , le but est d'y charger les données requises par le client.

6. Une fois que le client a appelé avec succès le fichier JSON, il obtiendra les données dont il a besoin. Le reste consiste à le traiter et à l'afficher selon ses propres besoins. Cette façon d'obtenir des données à distance ressemble beaucoup. AJAX, mais pas pareil.

7. Afin de faciliter l'utilisation des données par le client, un protocole de transmission informel s'est progressivement formé. Les gens l'appellent JSONP. L'un des points clés de ce protocole est de permettre aux utilisateurs de transmettre un paramètre de rappel au client. serveur, puis le service Lorsque le client renvoie des données, il utilisera ce paramètre de rappel comme nom de fonction pour envelopper les données JSON, afin que le client puisse personnaliser sa propre fonction pour traiter automatiquement les données renvoyées.

L'ajax original du code frontal est

 $.ajax({
             type: "get",
             async: false,
             url: "url",
             dataType: "json",             success: function(json){
                 alert('success');
             },
             error: function(){
                 alert('fail');
             }
         });

et doit être remplacé par

 $.ajax({
             type: "get",
             async: false,
             url: "url",
             dataType: "jsonp",
             jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)             jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据             success: function(json){                alert('success');             },
             error: function(){
                 alert('fail');
             }
         });


Comparez le différence entre les formats json et jsonp

format json :


{    "message":"获取成功",    "state":"1",    "result":{"name":"工作组1","id":1,"description":"11"}
}


format jsonp :


callback({    "message":"获取成功",    "state":"1",    "result":{"name":"工作组1","id":1,"description":"11"}
})


Vous pouvez voir la différence dans l'url, le paramètre de rappel passé en arrière-plan est Shenma et Shenma en a un. plus de couche que json. Vous savez donc comment y faire face. Modifiez donc le code d’arrière-plan.

Donc, l'écho json_encode ($xxx) original en php doit être remplacé par

$callback = $_GET['callback'];echo $callback.'('.json_encode($xxx).')';

Recommandations associées :

Résolution multi-domaines ajax La solution la plus complète

Partage d'exemples de solution parfaite inter-domaines Ajax

JS implémente le contenu de réponse du flacon de requête inter-domaines Ajax

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn