PHP完成跨域的几种方式
一、JSONP(JSON with padding)原理
行使html外面script标签能够加载其余域下的js这一特点,应用script src的方式来猎取其余域下的数据,然而,由于是经过标签引入的,以是,会将申请到的JSON格局的数据作为js去运转解决,显然这样运转是没有行的。
因而,就需求提前将前往的数据包装一下,封装成函数进交运行解决,函数名经过接口授参的形式传给后盾,后盾解析到函数名后正在原始数据上包裹这个函数名,发送给前端。(JSONP 需求对应接口的后真个合营能力完成)
实例:
<script>function showData(ret){ console.log(ret); }</script><script src="http://api.jirengu.com/weather.php?callback=showData"></script>
当script src申请抵达后端后,后端会去解析callback这个参数,猎取到字符串showData,正在发送数据后端前往数据,用showData封装一下,即showData({"json数据"}) ,前端script标签正在加载数据后,会把json数据作为showData的参数,挪用函数运转。
二、CORS
CORS全称是跨域资本同享(Cross-Origin Resource Sharing
),是一种 ajax 跨域申请资本的形式,支持古代阅读器,IE支持10以上。
完成形式:
当应用XMLHttpRequest
发送申请时,阅读器发现该申请没有合乎同源战略,会给该申请加一个申请头:Origin
,后盾进行一系列解决,假如确定承受申请,则正在前往后果中退出一个呼应头:Access-Control-Allow-Origin
;阅读器判别该相应头中,能否蕴含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>
三、postMessage
假定有两个域名(主域域名纷歧致),此中iframe页面是容许拜访挪用,那末就能够用postMessage完成。
原理:a域名发送申请postMessage,b域名间听到了message事情,就解决并前往数据
//b域名<script>window.frames[0].postMessage(this.value, '*'); //*号示意正在任何域下均可以接纳message window.addEventListener('message', function(e){ console.log(e.data); });</script>
以上内容仅供参考!
保举教程:PHP视频教程
以上就是php跨域的几种形式的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学 跨域
抱歉,评论功能暂时关闭!