当前位置: 首页 > article >正文

【JSON与JSONP】JSON与JSONP全面解析:定义、区别与核心技术对比

一、JSON与JSONP的基本定义

  1. JSON(JavaScript Object Notation)

    • 本质:一种轻量级的文本数据交换格式,基于键值对结构描述数据(如{"name":"John"}),支持字符串、数字、布尔值、数组、对象和null等数据类型。
    • 语法规则
      • 键名必须用双引号包裹,值可以是任意合法数据类型。
      • 对象用花括号{}表示,数组用方括号[]表示,数据项间用逗号分隔。
  2. JSONP(JSON with Padding)

    • 本质:一种利用<script>标签实现跨域请求的非官方协议,通过动态脚本执行获取数据。
    • 核心原理:服务器返回以函数调用包裹的JSON数据(如callback({"data":123})),客户端通过预定义的回调函数处理数据。

二、JSON与JSONP的核心区别

对比维度JSONJSONP
数据格式纯数据格式,遵循严格的语法规则以函数调用包裹的JSON数据(如callback({...})
用途与目的通用数据交换,适用于前后端通信专为解决跨域请求而设计
跨域支持受同源策略限制,需配合CORS实现跨域天然支持跨域,无需CORS配置
安全性安全性高,支持内容安全策略(CSP)存在XSS风险,依赖服务端信任

三、JSONP的工作原理与实现细节

  1. 动态创建<script>标签

    • 客户端通过JavaScript动态创建<script>标签,并将请求URL指向目标服务端(如src="http://api.com/data?callback=handleData")。
  2. 回调函数处理数据

    • 服务端返回数据格式为回调函数名(JSON数据)(如handleData({"status":200})),客户端需提前定义同名函数以接收数据。
  3. 自定义回调函数名

    • 通过URL参数指定回调函数名(如?callback=myFunc),服务端根据该参数动态生成返回内容。

四、其他相关技术对比

1. Ajax与JSONP的区别
维度AjaxJSONP
通信方式基于XMLHttpRequest对象基于<script>标签动态加载
跨域支持需服务端设置CORS响应头天然支持跨域
数据格式支持多种格式(JSON、XML等)仅支持JSONP格式
2. JSON与JSONB的区别
  • JSON:存储为纯文本,保留格式(如空格、键顺序),查询效率较低。
  • JSONB(如PostgreSQL中的二进制JSON):以二进制格式存储,支持索引和高效查询,但写入时需转换格式[注:搜索结果未直接提及,需结合数据库知识补充]。
3. NATP与JSON报文的区别
  • NATP:可能指网络地址转换协议(Network Address Translation Protocol),用于IP地址映射,与数据传输无关。
  • JSON报文:指基于JSON格式封装的应用层数据,用于业务逻辑交互[注:搜索结果未提及NATP,需结合网络协议知识推断]。

五、总结

JSON作为通用的数据交换格式,在前后端交互中占据核心地位;而JSONP作为一种“曲线救国”的跨域方案,虽逐渐被CORS替代,但在旧系统兼容场景中仍有价值。开发者需根据安全性、跨域需求和技术栈选择合适的方案。


http://www.kler.cn/a/572366.html

相关文章:

  • 初识uniApp
  • 计算机网络-实验四子网划分
  • 【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey
  • 高频 SQL 50 题(基础版)_1174. 即时食物配送 II
  • 使用GitLink个人建站服务部署Allure在线测试报告
  • Windows逆向工程入门之MASM字符处理机制
  • HarmonyOS学习第14天:深入剖析Ability组件
  • MyBatis-Plus 逻辑删除实现
  • 【Java面试】重载(Overload)和 重写(Override)的区别
  • Bruno运行登录接口遇到报错canot found module ‘htmlparser2’怎么解决
  • OpenHarmony多模输入子系统
  • 2025 自动代码审计工具灵脉 SAST 的应用实践
  • 【easy视频 | day02】管理端登录校验 + 分类管理 + 文件上传
  • ubuntu24.04-系统重装
  • 无人机陀螺仪原理与算法详解!
  • Android中使用Robolectric测试点击事件(不需要手机)
  • 智慧隧道:城市升级改造的地下动脉——塔能物联运维的核心驱动
  • 物联网数据中台 数据采集器 边缘盒子三者之间应用思考点
  • 【嵌入式】MQTT
  • python GUI之实现一个自定义的范围滑块控件:QRangeSlider