JSONP接口

article/2025/10/31 22:15:49

概念:浏览器通过<script>标签的src属性,请求服务器上的数据,同时服务器返回一个函数的调用。这种请求数据的方式叫JSONP

特点:JSONP不属于真正的的Ajax请求,因为它没有使用XMLHttpRequest这个对象

        JSONP仅支持GET请求,不支持POST、PUT、DELETE等请求


创建JSONP接口的注意事项

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


app.get('/api/jsonp',(req,res)=>{//定义JSONP的接口函数})
//解决接口跨域问题
const cors=require('cors')
app.use(cors())

 JSONP接口实现的步骤

  • 获取客户端发送过来的回调函数的名字(通过script标签)req.query.callback获取客户端的函数名字
  • 得到通过JSONP形式发送给客户端的数据,定义发送给客户端的数据(发送的对象)
  • 根据前两步得到的数据,拼接出一个函数调用的字符串JSON.stringify,转成json格式字符串
  • 把上一步得到的字符串,响应给客户端的<script>标签进行解析
app.get('/api/jsonp',(req,res)=>{//定义JSONP的接口函数//1、得到函数的名称const funcName=req.query.callback//2、定义发送给客户端的数据const data ={name:'zs',age:56}//3、拼接出函数的调用 转成json格式字符串const scriptStr=`${funcName}(${JSON.stringify(data)})`//4、把拼接的字符串相应给客户端res.send(scriptStr)})


在网页中使用jquery发起JSONP请求

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

路由api模块

//导入express
const express=require('express')
//创建路由对象
const Router=express.Router()
//定义get接口
Router.get('/get',(req,res)=>{//通过req.query获取客户端通过查询字符串获取发送到服务器的数据const query=req.query //get请求使用req.query post请求使用req.bodyres.send(//服务器的响应{status:0,//0表示处理成功 1表示处理失败msg:'GET 请求成功!',//状态的描述data:query //响应给客户端的数据})
})
//定义post接口
Router.post('/post',(req,res)=>{//通过req.query获取客户端通过查询字符串获取发送到服务器的数据const body=req.body //get请求使用req.query post请求使用req.bodyres.send(//服务器的响应{status:0,//0表示处理成功 1表示处理失败msg:'POST 请求成功!',//状态的描述data:body //响应给客户端的数据})
})
//定义delete接口
Router.delete('/delete',(req,res)=>{res.send(//服务器的响应{status:0,//0表示处理成功 1表示处理失败msg:'DELETE 请求成功!',//状态的描述})
})
//向外导出路由
module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}

express接口模块

 

const express=require('express')
//创建服务器
const app=express()
//配置解析表单数据的中间件app.use(express.urlencoded({extended:false}))app.get('/api/jsonp',(req,res)=>{//定义JSONP的接口函数//1、得到函数的名称const funcName=req.query.callback//2、定义发送给客户端的数据const data ={name:'zs',age:56}//3、拼接出函数的调用 转成json格式字符串const scriptStr=`${funcName}(${JSON.stringify(data)})`//4、把拼接的字符串相应给客户端res.send(scriptStr)})
//解决接口跨域问题
const cors=require('cors')
app.use(cors())
//导入路由模块
const router=require('./api路由模块')
//把路由模块注册到app上 ——app.use作用注册全局中间件
app.use('/api',router)//请求到达服务器 需要进行中间件的处理--挨个进行路由的匹配_统一前缀app.listen(80,()=>{console.log('express服务器启动成功 127.0.0.1')
})
<!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.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
</head>
<body><button id="get">GET</button><button id="post">POST</button><button id="delete">DELETE</button><button id="jsonp">JSONP</button><script>$(document).ready(function(){//1.测试GET接口$('#get').on('click',function(){$.ajax({type:'GET',//规定请求的类型(GET 或 POST)。url:'http://127.0.0.1/api/get',//规定发送请求的 URLdata:{name:'zs',age:20},//规定要发送到服务器的数据。success:function(res){console.log(res)},})})//2.测试POST接口$('#post').on('click',function(){$.ajax({type:'POST',url:'http://127.0.0.1/api/post',data:{name:'白居易',age:80},success:function(res){console.log(res)},})})//为删除按钮绑定点击事件处理函数$('#delete').on('click',function(){$.ajax({type:'DELETE',//在服务器端提供此接口的函数url:'http://127.0.0.1/api/delete',success:function(res){console.log(res)//服务器响应的数据},})})//为JSONP按钮点击事件处理函数$('#jsonp').on('click',function(){$.ajax({type:'GET',//在服务器端提供此接口的函数url:'http://127.0.0.1/api/jsonp',dataType:'jsonp',//指定请求的类型 jsonp的特殊格式success:function(res){console.log(res)//服务器响应的数据},})})})</script>
</body>
</html>

 


http://chatgpt.dhexx.cn/article/OmuyHZQZ.shtml

相关文章

java 调用接口为json格式

#simple 直接上代码 ①pom文件导入hutool的war包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.10</version></dependency>②new JSONObject(); 对象&#xff0c; put你所需要的…

『前端必备』本地数据接口—json-server

文章目录 json-server介绍简介操作步骤 操作数据增&#xff08;POST&#xff09;删&#xff08;DELETE&#xff09;改&#xff08;UPDATE、PATCH&#xff09;查&#xff08;GET&#xff09;筛选分页排序切片(分页)特殊符号添加_gte或_lte获取范围添加_ne以排除值添加_like到过滤…

接口接收JSON数据

1. 使用场景&#xff1a;定义接口供对方调用。请求数据为JSON格式&#xff0c;请求方法为post&#xff0c;请求参数如下&#xff1a; { "num":" 1600330803432", "comCode": "feisu" } 2. 接口接收方法 ResponseBody public Ba…

JSON和API接口初识

首先认识一下JSON JSON官网&#xff1a;http://www.json.org/json-zh.html JSON是一种数据格式&#xff0c;是一种在互联网传输中运用最多的数据交换语言&#xff0c;由于它轻便、灵巧&#xff0c;且能从各种语言中完全独立出来&#xff0c;所以成为目前最理想的数据交换语言…

Java数据接口编写简单例子,Java Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据

实现效果 实现原因 目前主流的CS结构&#xff0c;数据都是通过RESTful风格接口形式呈现&#xff0c;不管是桌面级应用程序还是手机端&#xff0c;接口是我们获取数据的大多数选择&#xff0c; 主流数据接口呈现形式主要是Json和Xml&#xff0c;后者目前基本渐行渐远。Json的轻量…

json接口(使用,以及自定义)

json使用 在spring boot中&#xff0c;返回一个数组,哈希表&#xff0c;spring boot会自动将List,HashMap转化为json,因此不要自定义转化。 如果自定义转化&#xff0c;后端会爆出一个警告&#xff0c;并且前端出现500&#xff08;404&#xff09;&#xff0c;无法访问。因此…

前后端角度看接口(什么是json)?

文章目录 什么是JSON&#xff1f;为什么需要JSON&#xff1f;总结 什么是JSON&#xff1f; JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集&#xff0c;采用完全独立于编程语言的文本格…

JSON接口

RestController 相当于ControllerResponseBody两个注解的结合&#xff0c;返回json数据&#xff0c;不能返回jsp,html页面。 Autowired 对类成员变量、方法及构造函数进行标注&#xff0c;让 spring 完成 bean 自动装配的工作。 PostMapping 映射一个POST请求。 PutMapping 处理…

JSON端口操作实例

JSON 端口可直接实现在 JSON 和 XML 之间进行转换。端口会自动检测输入文件是 JSON 还是 XML&#xff0c;然后将文件在两种格式间相互转换。 该端口较多的是运用在API接口调用集成方案的项目当中&#xff0c;我们以百思买项目为例&#xff0c;知行之桥将接收到的百思买的EDI报…

JSON-初识+解析

1. JSON 1.1 什么是JSON JSON&#xff08;JavaScript Object Notation, JS 对象标记&#xff09;&#xff1a;是一种轻量级的数据交换格式。JSON使用JavaScript 语法来描述数据对象&#xff0c;采用完全独立于语言的文本格式&#xff0c;易于存储和交换。 JSON 的网络媒体类型…

unity协程coroutine 简明教程

本篇内容基于 https://gamedevbeginner.com/coroutines-in-unity-when-and-how-to-use-them/ 以及官方教程 为什么使用协程 协程非常适合设置需要随时间发生变化的游戏逻辑。很自然我们会想到update&#xff0c;update里指出每一帧unity会执行什么操作。协程则可以将代码从up…

浅析Unity协程实现原理

介绍 协程Coroutine在Unity中一直扮演者重要的角色。可以实现简单的计时器、将耗时的操作拆分成几个步骤分散在每一帧去运行等等&#xff0c;用起来很是方便。 但是&#xff0c;在使用的过程中有没有思考过协程是怎么实现的&#xff1f;为什么可以将一段代码分成几段在不同帧执…

Unity协程和线程的区别深入理解(附实验展示)

Unity协程和线程的区别附实验展示 写在前面协程、进程、线程的概念进程与线程的区别协程与线程的区别实验1&#xff1a;协程中执行普通函数实验2&#xff1a;协程中开启另一个协程实验3&#xff1a;协程中开启WWW请求实验4&#xff1a;一个脚本中多个协程访问临界资源实验5&…

Unity 协程 Unity Task UniTask

协程 使用 StartCoroutine 和 IEnumerator yield return null 暂停执行并随后在下一帧恢复 yield return new WaitForSeconds(1f); 延迟1秒 waitfor系列有好几个 WaitForSeconds 和 WaitForSecondsRealtime 的区别 使用缩放时间将协程执行暂停指定的秒数。 实际暂停时间等于…

Unity 协程探究

一、官方手册中的描述 1、Manual/Coroutines 函数在调用时, “从调用到返回” 都发生在一帧之内&#xff0c;想要处理 “随时间推移进行的事务”&#xff0c; 相比Update&#xff0c;使用协程来执行此类任务会更方便。 协程在创建时&#xff0c;通常是一个 “返回值类型 为 …

Unity 协程底层原理解析

1、协程 unity是单线程设计的游戏引擎&#xff0c;unity实际上有多条渲染线程&#xff0c;但对于unity调用我们编写的游戏脚本&#xff0c;都是放在一个主线程当中进行调度的。因此对于我们写的游戏脚本unity是单线程的。 协程不是进程或者线程&#xff0c;它的执行过程更类似…

Unity协程那些事儿

Unity协程那些事儿 1、什么是协程&#xff1f;2、协程的使用3、关于yield4、关于IEnumerator/IEnumerable5、从IEnumerator/IEnumerable到yield6、Unity协程机制的实现原理7、源码分析8、总结 1、什么是协程&#xff1f; 用过Unity的应该都知道协程&#xff0c;今天就给大家来…

Unity⭐️当Unity协程遇到while

文章目录 Unity协程是一个老生常谈的知识点了&#xff0c;但今天博主却差点被一篇文章忽悠了 那就是这句话&#xff1a; 为什么说这句话不对呢 那就是当遇到while时&#xff0c;我们再来检验这句话的正确性&#xff1a; 按上面那句话&#xff0c;应该每次yield return后&…

深入探讨Unity协程及其使用

深入探讨Unity协程及其使用 协程 协程在Unity中是个很重要的东东&#xff0c;相信很多人都使用过&#xff0c;它能够非常方便的进行异步等待操作&#xff0c;可以说&#xff0c;用好协程&#xff0c;可以使你的代码更加优雅&#xff0c;然而&#xff0c;如果用不好&#xff0…

Unity 协程、模拟协程

理解协程 IEnumeratoryield 强大的迭代器 IEnumerator 就是一个函数容器 里面保存了一个一个的函数 IEnumator会依次执行每个函数 而每个函数都有一个返回值 保存在IEnumator.Currect里面 看下面这个例子 IEnuermator start_Coroutine(){Debug.Log("HellWord")…