jsonp的使用
2019-12-26 22:22 lfl976 阅读(213) 评论(0) 收藏 举报看见高德地图使用异步加载方式是jsonp。来试一试jsonp

1.用express启动一个服务
// server.js
// node server.js 启动服务
const express = require('express') const app = express() app.listen(7879, () => console.log('app is listen on port 7879')) app.get('/', (req, res) => { res.set('Access-Control-Allow-Origin', '*') // 跨域 res.send('init') })
2.fetch请求接口
这时不设置res.set('Access-Control-Allow-Origin', '*') ,浏览器会提示跨域错误
设置之后打印 ‘init’
// jsonp.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> fetch('http://localhost:7879/') .then(res =>{ return res.text() }) .then(res => { console.log(res) // 打印init }) </script> </body> </html>
3.用<script src="http://localhost:7879"></script>脚本方式请求
请求后浏览器提示

返回的init直接运行了。
在请求脚本之前定义一个init的变量就不会报错了,如果返回 init() 呢?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title>
<script>
// script是从上到下顺序执行的,所以变量定义在前面
var init = 1
</script> <script src="http://localhost:7879"></script> </head> <body> // <script>
// init
// </script> </body> </html>
4.返回init()时
const express = require('express')
const app = express()
app.listen(7879, () => console.log('app is listen on port 7879'))
app.get('/', (req, res) => {
// res.set('Access-Control-Allow-Origin', '*')
res.send('init()')
})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> function init() { console.log('init执行') } </script> <script src="http://localhost:7879"></script> // img,script请求都没有跨域的问题 </head> <body> </body> </html>
打开html页面,浏览器打印了:
后台返回init(),直接执行了。
我们也可以在返回init()时添加参数,比如init('params'),这样前端可以拿到数据。
也可以把需要调用的函数名传递给后台。
总结:jsonp没有跨域限制,可以得到后台数据(通过传参)。
浙公网安备 33010602011771号