聊聊json和jsonp
发布日期:2021-05-15 04:58:56 浏览次数:20 分类:精选文章

本文共 2056 字,大约阅读时间需要 6 分钟。

JSON和JSONP: 跨域数据传输的两种方案

JSON的解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于文本且易于人阅读和机器解析。它采用键值对的结构,非常适合传递复杂数据。本文将从以下几个方面为您分析JSON的特点及其优势。

JSON的优点

  • 纯文本格式,跨平台传输简单:JSON数据可以直接以字符串形式传输,不需要依赖特定的数据类型,适合在各种系统间传递。
  • 紧密结合JavaScript:由于JavaScript原生支持JSON解析,前后端开发者可以无缝对接,减少转换成本。
  • 数据量小,传输效率高:JSON文件通常比先前的XML格式更小,减少了传输时间和带宽占用。
  • 易于解析和书写:虽然不如XML那样强调可扩展性,但在合理缩进下,JSON结构也非常清晰,方便开发者理解和修改。
  • JSON的语法规则

    JSON采用键值对的结构,支持两种主要的数据结构集合:

    • **{} 表示对象(键值对集合),每个键对应一个值。
    • **[] 表示数组(具有顺序的单一类型集合)。

    JSON的关键符号包括:

    • : 用于键值对的分隔。
    • , 用于同一层级元素的分隔。
    • " " 用于字符串类型的包裹。
    • 方括号和花括号分别表示数组和对象。

    常用数据类型包括:字符串、数字、布尔值、null和日期。日期处理建议直接以字符串形式传输,避免复杂的格式转换。

    JSONP的机制

    JSONP(JSON with Padding)是一种非官方的跨域数据传输协议。它通过在script标签的src属性中传递一个callback函数名称,来获取远程服务器返回的JSON数据。与传统的AJAX不同,JSONP并不通过XMLHttpRequest对象,而是利用JavaScript的script标签来实现。

    JSONP工作原理

  • 服务器端处理:服务连接接受一个请求,包含callback参数,指定要调用本地的函数名称。服务器返回的数据格式为:callback({data}),将JSON数据包裹在指定函数中。
  • 客户端执行:客户端脚本解析响应内容,提取JSON数据并执行回调函数,进行后续处理。
  • JSONP的优势

  • 无需依赖.TextInputStream:适用于AJAX禁止的情况下,仍能实现跨域数据获取。
  • 灵活性:客户端可以自定义回调函数,根据需求处理数据。
  • 无长度限制:传输的数据量与script标签一致,通常不会受到浏览器大小限制。
  • JSONP的实现示例

    假设我们有一个远程服务器提供数据服务:

    // 远程文件: remote.js
    localHandler({"result":"远程数据"});
    // 本地文件: localserver.com
    // 调用接口:
    var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler";
    var script = document.createElement('script');
    script.src = url;
    document.head.appendChild(script);

    运行后,远程脚本会调用localHandler函数,并将JSON数据传递进去。

    jQuery对JSONP的支持

    使用jQuery可以简化JSONP调用。例如,可以通过以下方式实现:

    $.ajax({
    type: "GET",
    url: "http://flightQuery.com/jsonp/flightResult.aspx",
    dataType: "jsonp",
    jsonp: "callback",
    jsonpCallback: "flightHandler",
    success: function(json) {
    console.log(json.result);
    }
    });

    jQuery会自动处理JSONP数据,使得开发者无需手动定义回调函数。

    JSON与JSONP的对比

    尽管JSON和JSONP在跨域数据传输中扮演重要角色,但二者本质上有所不同:

  • 传输方式:JSON通过XMLHttpRequest实现,依赖服务端代理,适合需要用户交互的AJAX请求。
  • 应用场景:JSONP则通过脚本标签实现,通常用于批量数据获取或无需富交互的场景。
  • 安全性:JSON依赖服务端签名,确保数据安全;而JSONP数据暴露在客户端脚本中,需谨慎处理。
  • 结论

    在跨域数据传输中,JSON和JSONP各有优势但也各有局限。开发者应根据项目需求选择最优方案,例如:

    • 当需要频繁交互或操作复杂数据结构时,JSON是更合适的选择。
    • 当专注于数据获取或批量数据传输时,JSONP可以提供灵活的解决方案。

    通过合理配置和工具的支持,开发者可以轻松应对跨域数据传输的挑战,构建高效的应用程序。

    上一篇:ubuntu14.04 rabbitmq安装、nginx部署及centos安装
    下一篇:python模块之 paramiko

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月29日 21时16分16秒