node.js跨域的解决方案之jsonp(学会了放屁会变香★.★)

跨域问题

// 跨域代理方式
// 跨域产生的原因是因为浏览器有同源策略
// 解决方案有
// jsonp(原理:script标签的src不受同源策略的影响)
// cors(设置请求头)
// 服务器代理
// 长连接

下面我们就来仔细讲解跨域解决方案按之中的jsonp

Jsonp跨域接口以及请求

jsonp请求的小常识

jsonp请求返回的一定要是js文件
jsonp请求的接口只能是get的接口不可以是其他的接口类型(其它接口类型有很多比如post put patch delete接口)

如下为html请求的写法

<body>
    <button id="s">发送jsonp跨域请求</button>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
<script>
     s.onclick=function(){
        var script = document.createElement("script")
        // 注意要把回调函数的字段传入到访问地址栏里去
        script.src ="http://localhost:3333/jsonp?callback=laoxie"
        // 创建完scrpt标签,要把script标签放入到body里面才会发请求,如果不放就不会发请求
        var body = document.querySelector("body")
        body.appendChild(script)
    }
        // 回调函数一定要是全局的不然就会报错
    function laoxie(res){
        console.log(res);
    }
</script>

Jsonp接口

// jsonp请求的小常识
// jsonp请求返回的一定要是js文件
// jsonp请求的接口只能是get的接口不可以是其他的接口(其它接口比如post put patch delete接口)
const express=require("express")
const app=express()
app.get("/jsonp",(req,res)=>{
    // 如果你传入的字段属性名是callback结构callback,如果是别的就结构别的,结构什么看你请求地址的回调属性名
    var {callback}=req.query
    var data={
        boy:"张亿",
        gril:"马嘉宁",
        love:"★"
    }
    // 返回一个全局的回调函数调用
    // 回调函数内部参数需要转成JSON字符串并且配合模板字符串
    // 把data对象当做一个变量传入回调函数的实参当中
    res.send(`${callback}(${JSON.stringify(data)})`)
})
app.listen(3333,()=>{
    console.log("服务器3333端口号已经成功开启!");
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值