当前位置:网站首页>解决跨域问题的方法 --- JSONP
解决跨域问题的方法 --- JSONP
2022-08-02 14:17:00 【z_小张同学】
JOSNP全称json with padding,可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
在前端中可以跨域的标签有以下几种:
<img src="" alt="">
<script src=""></script>
<a href=""></a>
<link href="">
router.js代码:
var fs=require("fs")
var url=require("url")
var querysting=require("querystring")
var mime=require("mime")
let urls={}
var http=require("http")
let router=function(req,res){
//这个函数每次用户访问时运行
let pathname=url.parse(req.url).pathname
fs.readFile(router.basepath+pathname,(err,data)=>{
if(!err){
res.setHeader("content-Type",mime.getType(pathname))
res.end(data)
}else{
if(!urls[pathname]){res.end("404 not found-mymvc")}
else{urls[pathname](req,res)}
}
})
}
router.static=function(path){
this.basepath=path
}
router.get=function(url,cb){
urls[url]=cb
}
router.basepath=__dirname+"/public"
http.createServer(router).listen(8081)
module.exports=router;
服务器端的index.js代码:
var router = require("./router.js")
var url = require("url")
var querysting = require("querystring")
router.get("/ajax",function(req,res) {
var obj = {name:"xiaozhang",age:21,books:["book1","book2"]}
var str = JSON.stringify(obj)
var query1 = url.parse(req.url).query
var queryobj = querysting.parse(query1)
res.end(`${queryobj.callback}(${str})`)
})
客户端index.html代码:
<button onclick="fn()">JSONP请求</button>
<script>
function fn() {
var name = "hq"+new Date().getTime()
window[name] = function(arg) {
console.log(arg);
}
var script1 = document.createElement("script")
script1.src = `http://192.168.0.114:8081/ajax?callback=${name}`
document.body.append(script1)
}
</script>
点击按钮之后的结果:
对JSONP的理解:
1.前端网页中用ajax请求跨域服务器的网址 会报跨域错误;而用script标签的src属性去请求跨域服务器的网址, 不会报跨域错误,但是 会直接把请求过来的编码用v8引擎去运行
2. 我们可以在后端写一个js引擎能识别的字符串发送给前端,这个字符串是这样的:
' fn({"name":"karen"}) ' ;前端可以用script标签的src属性去请求这个网址,请求完毕以后 v8引擎就会直接运行这个编码 去调用fn函数,所以我们必须提前创建这个函数
3.函数的名称问题: 前端可以通过querystring把函数名以参数的形式发送给后端
边栏推荐
- VMware 安装openwrt
- Vmware workstation16 安装 ESXi 6.7 详细步骤
- 为什么 RTP 的视频的采样率是 90kHz ?
- 移动端UI自动化相关环境配置
- 异常抛出错误
- Zabbix: PHP option“date.timezone” Fail
- Oauth2.0 authentication server construction
- CDH (computational Diffie-Hellman) problem and its differences with discrete logarithm and DDH problems
- 【软件测试】性能测试理论
- Oauth2.0 Supplement
猜你喜欢
随机推荐
解决启动filebeat时遇到Exiting: error unpacking config data: more than one namespace configured accessing错误
为什么 RTP 的视频的采样率是 90kHz ?
【个人向】线性表复习
OpenPose Basic Philosophy
支付系列文章:PCI合规能力建设
test3
小知识点系列-基于H2数据库单元测试
Dcoker的安装及使用命令
【软件测试】禅道的简要介绍
HCIE学习记录——数通网络基础
【软件测试】测试基础讲解
tab 替换空格
ssm整合
【solidity智能合约基础】节约gas的利器--view和pure
代码细节带来的极致体验,ShardingSphere 5.1.0 性能提升密钥
GC垃圾收集器G1
异常抛出错误
个人成长系列:业务、技术学习书单
关于导出聊天记录这件事……
个人成长系列:好问题清单