Plusieurs formes d'implémentation inter-domaines en PHP
Principe JSONP (JSON avec remplissage)
Utilisez la balise script en HTML pour charger js dans d'autres domaines, et utilisez le script src pour obtenir des données dans d'autres domaines Cependant, comme elle est introduite via des balises, Par conséquent. , les données au format JSON demandées seront exécutées et traitées comme js. Évidemment, cette opération ne fonctionnera pas.
Par conséquent, il est nécessaire de conditionner les données renvoyées à l'avance et de les encapsuler dans une fonction pour le fonctionnement et le traitement. Le nom de la fonction est transmis au backend via les paramètres de l'interface. nom de la fonction, il sera utilisé dans l'original Enveloppez ce nom de fonction sur les données et envoyez-le au front-end. (JSONP nécessite la coopération du backend de l'interface correspondante pour être mis en œuvre)
Exemple :
<script>function showData(ret){ console.log(ret); }</script><script src="http://api.jirengu.com/weather.php?callback=showData"></script>
2. CORS
Le nom complet de CORS est le partage de ressources entre domaines (), qui est un moyen ajax de demander des ressources sur tous les domaines, prend en charge les navigateurs modernes, IE prend en charge 10 et plus. Cross-Origin Resource Sharing
Méthode de mise en œuvre :
Lors de l'utilisation de pour envoyer une requête, le navigateur constate que la requête n'est pas conforme à la politique de même origine et ajoute une requête en-tête à la requête : XMLHttpRequest
, une série de traitements est effectuée en arrière-plan Si la requête est déterminée comme étant acceptée, un en-tête de réponse est ajouté au résultat renvoyé : Origin
; la valeur d'Origin.Si tel est le cas, le navigateur pourra obtenir les données de réponse après avoir traité la réponse. Si elles ne sont pas incluses, le navigateur les rejettera directement. Pour le moment, nous ne pouvons pas obtenir les données de réponse. Access-Control-Allow-Origin
server.js
var http = require('http') var fs = require('fs') var path = require('path') var url = require('url')http.createServer(function(req, res){ var pathObj = url.parse(req.url, true) switch (pathObj.pathname) { case '/getNews': var news = [ "第11日前瞻:中国冲击4金 博尔特再战200米羽球", "正直播柴飚/洪炜出战 男双力争会师决赛", "女排将死磕巴西!郎平安排男陪练模仿对方核心" ] res.setHeader('Access-Control-Allow-Origin','http://localhost:8080') //res.setHeader('Access-Control-Allow-Origin','*') res.end(JSON.stringify(news)) break; default: fs.readFile(path.join(__dirname, pathObj.pathname), function(e, data){ if(e){ res.writeHead(404, 'not found') res.end('<h1>404 Not Found</h1>') }else{ res.end(data) } }) }}).listen(8080)
index.html
<!DOCTYPE html><html><body> <div class="container"> <ul class="news"></ul> <button class="show">show news</button> </div><script> $('.show').addEventListener('click', function(){ var xhr = new XMLHttpRequest() xhr.open('GET', 'http://127.0.0.1:8080/getNews', true) xhr.send() xhr.onload = function(){ appendHtml(JSON.parse(xhr.responseText)) } }) function appendHtml(news){ var html = '' for( var i=0; i<news.length; i++){ html += '<li>' + news[i] + '</li>' } $('.news').innerHTML = html } function $(selector){ return document.querySelector(selector) } </script> </html>
3 , postMessage
En supposant qu'il existe deux noms de domaine (les noms de domaine principaux sont incohérents) et que la page iframe autorise l'accès aux appels, elle peut alors être implémentée avec postMessage.Principe : Un nom de domaine envoie une demande de postMessage, et le nom de domaine B entend l'événement de message, traite et renvoie les données
//b域名<script>window.frames[0].postMessage(this.value, '*'); //*号表示在任何域下都可以接收message window.addEventListener('message', function(e){ console.log(e.data); });</script>
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!