当前位置: 代码迷 >> 综合 >> 创建 JSONP 接口
  详细解决方案

创建 JSONP 接口

热度:94   发布时间:2023-12-05 02:14:25.0

1.JSONP的实现原理。

浏览器通过<script>标签的src属性,请求服务器的数据,同时,服务器返回一个函数的调用。

特点:

  • JSONP 不属于真正的 Ajax 请求,因为它没有使用 XMLHttpRequest 这个对象
  • JSONP 仅支持 GET 请求,不支持 POSTPUTDELETE 等请求

 2.创建JSONP接口。

注意事项:

如果项目中已经配置了CORS跨域资源共享,为了防止冲突,必须在配置CORS中间件之前声明JSONP的接口,否则JSONP接口会被处理成开起了CORS接口。

1.准备工作:

  • 创建一个app.js文件   一个api文件夹 ,api文件夹下创建一个apiRouter.js文件,创建一个index.html文件
  • 运行npm i express ,安装express模块   
  • 运行npm i cprs 命令,安装 mysql 模块

2.实现步骤分析:

  • 获取客户端发送过来的回调函数的名字
  • 得到要通过 JSONP 形式发送给客户端的数据
  • 根据前两步得到的数据,拼接出一个函数调用的字符串
  • 把上一步拼接得到的字符串,响应给客户端的 <script> 标签进行解析执行

代码: 

// 导入 express 模块
const express=require('express')
// 创建 express 的服务器实例
const app.express()
// 配置解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))
// 必须在配置 cors 中间件之前,配置 JSONP 的接口
app.get('/api/jsonp',(req,res)=>{
//定义JSONP接口的具体实现过程
// 1. 得到函数的名称
const funcName=req.query.callback;
// 2. 定义要发送到客户端的数据对象
const data={name:'sjj',age:18}
// 3. 拼接处一个函数的调用
const scriptStr = `${funcName}(${JSON.stringify(data)})`
// 4. 把拼接的字符串,响应给客户端
res.send(scriptStr)
})const cors=require('cors')
app.use(cors())const router=require('./apiRouter')
// 把路由模块,注册到 app 上
app.user('/api',router)// 调用 app.listen 方法,指定端口号并启动 web 服务器
app.listen(8080,()=>{
console.log('running……')
})

3.在网页中使用 jQuery 发起 JSONP 请求

调用 $.ajax() 函数,提供 JSONP 的配置选项,从而发起 JSONP 请求

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head><body><script>$(function () {$.ajax({method: 'GET',url: 'http://127.0.0.1:8080/api/jsonp',dataType: 'jsonp',success: function (res) {console.log(res)}})})</script>
</body></html>

  相关解决方案