1. 概念及特点
概念:浏览器通过 <script> 标签的 src 属性,请求服务器上的数据,同时服务器返回一个函数的调用。这种请求数据的方式叫做 jsonp
特点: ① jsonp 不属于真正的 ajax 请求,因为它没有使用 xmlhttprequest 这个对象
② jsonp 仅支持 get 请求,不支持 post、put、delete 等请求
2. 创建 jsonp 接口的注意事项
如果项目中已经配置了 cors 跨域资源共享,为了防止冲突,必须在配置 cors 中间件之前声明 jsonp 的接口。否者 jsonp 接口会被处理成开启了 cors 的接口
// 优先创建 jsonp 接口 [这个接口不会被处理成 cors 接口] app.get('/api/jsonp', (req, res) => { }) // 配置 cors 中间件 [后续的所有接口都会被处理成 cors 接口] app.use(cors()) // 这是一个开启了 cors 的接口 app.get('/api/get', (req, res) => { })
3. 实现 jsonp 接口的步骤
① 获取客户端发送过来的回调函数的名字
② 得到要通过 jsonp 形式发送给客户端的数据
③ 根据前两步得到的数据,拼接出一个函数调用的字符串
④ 把上一步拼接得到的字符串,响应给客户端的 <script> 标签进行解析执行
4. 实现 jsonp 接口的具体代码
app.get('/api/jsonp', (req, res) => { // 1. const funname = req.query.callback // 2. const data = { name: 'zj', age: '22' } // 3. const scriptstr = `${funname}(${json.stringify(data)})` // 4. res.send(scriptstr) })
5. 在网页中使用 jquery 发起 jsonp 请求
调用 $.ajax()函数,提供 jsonp 的配置选项,从而发起 jsonp 请求
$('#btnjsonp').on('click', () => { $.ajax({ method: 'get', url: 'http://127.0.0.1/api/jsonp', datatype: 'jsonp', // 表示要发起的是 jsonp 请求 success: (res) => { console.log(res) } }) })
使用jsonp格式实现跨域
实现步骤
- 动态创建一个script标签
- src指向接口的地址
- 定义一个函数和后端调用的函数名一样
实现代码 -- 在nodejs中使用http内置模块起一个服务,端口号为3000
const url = require('url') const http = require('http') const server = http.createserver((req,res)=>{ if(req.url === '/favicon.ico') return //图标忽略 --- 图标地址也会请求后台服务 const {query,pathname} = url.parse(req.url,true) //若加上true这个参数,query字符串参数会自动转成对象格式 //设置头部信息 状态为200 内容为json格式 如果要返回html片段这设置为text/html res.writehead(200, { 'content-type': 'application/json' }); if(pathname == '/api/data'){ //定义对象,返回给前端的 数据 const obj = {code:200,message:'jsonp形式返回给前端'} //返回一个json调用的函数 res.end(`tofront(${json.stringify(obj)})`) }else{ //简单处理了 res.writehead(404, { 'content-type': 'application/json' }); res.end('404') } //jsonp跨域操作 // console.log(req.url) //获取请求除域名外的地址 例如 localhost:300/api 只获取/api }) server.listen(3000,()=>{ console.log("服务已启动") })
在客户端的代码
<script type="text/javascript"> //jsonp跨域步骤 //1.动态创建一个script标签 const newscript = document.createelement('script') //2.src指向接口的地址 newscript.src = 'http://localhost:3000/api/data' document.body.appendchild(newscript ) //3.定义一个函数和后端调用的函数名一样 function tofront(res){ //后台返回的数据 这个函数是后台服务调用过来的 console.log(res) } </script>
执行的结果 ,返回一个json格式的文档
到此这篇关于node.js使用jsonp接口的具体用法的文章就介绍到这了,更多相关node.js jsonp接口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论