说说JSON和JSONP 也许你会豁然开朗

yizhihongxing

那我来给您详细讲解一下如何理解JSON和JSONP。

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它使用易于人们阅读和编写的文本格式来传输和存储数据。JSON可以使用JavaScript函数eval()进行解析。

JSON格式由键值对构成,最外层是一个大括号({})形成的对象,键值对之间使用逗号(,)进行分隔。键必须是字符串,而值可以是任何JSON类型,包括数组、对象、字符串、数字、布尔值和null。例如:

{
  "name": "张三",
  "age": 22,
  "hobbies": ["篮球", "游泳", "编程"],
  "address": {
    "province": "广东",
    "city": "深圳",
    "district": "宝安"
  },
  "isNull": null,
  "isTrue": true,
  "isFalse": false
}

什么是JSONP?

JSONP(JSON with Padding)是一种使用过时但仍然常用的跨域数据交互方式。它的原理是利用script标签没有跨域限制这一特性,实现从其他域名(网站)获取JSON数据,解决了AJAX不能跨域访问的问题。

使用JSONP需要在页面上引入一个外部的JavaScript文件,该文件通过动态创建script标签,并通过src属性指向API地址,将JSON数据作为参数传递给一个用户定义的回调函数。后端需要对请求做特殊处理,将JSON数据作为函数的参数返回。例如:

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>JSONP Demo</title>
</head>
<body>
  <script type="text/javascript" src="http://api.example.com/jsonp?callback=handleData"></script>

  <script type="text/javascript">
    function handleData(data) {
      console.log(data);
    }
  </script>
</body>
</html>
// API返回的JSONP格式数据示例
handleData({
  "name": "张三",
  "age": 22,
  "hobbies": ["篮球", "游泳", "编程"],
  "address": {
    "province": "广东",
    "city": "深圳",
    "district": "宝安"
  },
  "isNull": null,
  "isTrue": true,
  "isFalse": false
});

在URL上添加callback参数,该参数的值是一个回调函数的名称,后端将返回数据作为该回调函数的参数进行返回。

示例说明

首先,我们可以使用XMLHttpRequest对象(简称xhr)与服务端进行交互,返回JSON格式的数据。

// 发送AJAX请求,获取JSON数据
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    // 解析JSON数据
    var data = JSON.parse(xhr.responseText);
    console.log(data);
  }
};
xhr.open('GET', 'http://api.example.com/data.json');
xhr.send();

接下来,我们可以使用JSONP方式获取与该域名下不同的域名(数据源)的JSON数据。

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>JSONP Demo</title>
</head>
<body>
  <script type="text/javascript" src="http://api.example.com/jsonp?callback=handleData"></script>

  <script type="text/javascript">
    function handleData(data) {
      console.log(data);
    }
  </script>
</body>
</html>
// API返回的JSONP格式数据示例
handleData({
  "name": "张三",
  "age": 22,
  "hobbies": ["篮球", "游泳", "编程"],
  "address": {
    "province": "广东",
    "city": "深圳",
    "district": "宝安"
  },
  "isNull": null,
  "isTrue": true,
  "isFalse": false
});

以上两个示例可以帮助您更好地理解JSON和JSONP。希望能对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:说说JSON和JSONP 也许你会豁然开朗 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript基础教程——入门必看篇

    JavaScript基础教程——入门必看篇 第一部分:JavaScript简介 JavaScript是一种广泛使用的脚本语言,它可以让网页具有交互性和动态性。本篇入门教程主要介绍JavaScript的基础知识,帮助初学者快速入门。 第二部分:变量、运算符和语句 在JavaScript中,变量、运算符和语句是非常基础且重要的概念。变量通过声明来定义,运算符可以…

    JavaScript 2023年5月17日
    00
  • ECMAscrip新特性函数介绍

    ECMAScrip新特性函数介绍 ECMAScript是JavaScript的标准规范,自1997年第一版发布以来,经历了多次更新和迭代,为我们带来了越来越多的语言特性和新的函数。在本篇文章中,我们将介绍一些新特性函数,希望能够帮助大家更好地使用JavaScript编程。 Promise Promise是ES6中添加的新的语言特性,用于处理异步操作。Prom…

    JavaScript 2023年5月27日
    00
  • JavaScript获取时区实现过程解析

    当我们需要获取时区信息时,JavaScript提供了一些内建方法和对象可以帮助我们快速获取本地和UTC时间之间的差异。本文将详细讲解JavaScript获取时区的实现过程和示例。 获取本地时区 我们可以使用Date对象的getTimezoneOffset()方法获取当前本地时间与UTC时间的差值(单位为分钟)。因为我们知道UTC时间偏移值已知,因此我们可以通…

    JavaScript 2023年5月27日
    00
  • JavaScript前端开发之实现二进制读写操作

    JavaScript前端开发之实现二进制读写操作 在JavaScript中,读取和操作二进制数据是一个非常实用的技能。以下是实现二进制读写操作的完整攻略。 使用ArrayBuffer 在JavaScript中实现二进制读写操作的最常用的方法是使用ArrayBuffer对象。ArrayBuffer在内部表示二进制数据,可以直接快速读取和操作。以下是创建和初始化…

    JavaScript 2023年5月19日
    00
  • js window对象属性和方法相关资料整理

    关于JavaScript中的window对象,我们可以分别从属性和方法两个方面进行讲解: window对象属性 窗口大小: innerWidth/innerHeight: 获取窗口的内部宽度和高度(不包含边框、工具栏等部分)。 outerWidth/outerHeight:获取窗口的外部宽度和高度(包含边框、工具栏等部分)。 地址栏和历史记录: locati…

    JavaScript 2023年5月27日
    00
  • js实现酷炫倒计时动画

    下面是“js实现酷炫倒计时动画”的完整攻略。 1. 倒计时的原理 倒计时的实现原理是计算当前时间与目标时间之间的时间差(以秒为单位),然后将时间差转换成时、分、秒等单位,最后将这些单位显示出来。在实现动画效果时,可以将显示的数据和动画效果绑定在一起,通常是通过CSS3中的transition或者动画实现。 2. 实现步骤 2.1 设定目标时间 首先我们需要确…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计(第3版)学习笔记9 js函数(下)

    《JavaScript高级程序设计(第3版)学习笔记9 js函数(下)》一文主要讲解了 JavaScript 中函数的进阶应用,包括函数作为对象、闭包、函数自执行等内容,下面是具体的攻略: 1. 函数作为对象 在 JavaScript 中,函数同时也是对象,因此它们可以拥有属性和方法。函数的属性通常是直接在函数对象上定义,而方法则是定义在函数的原型对象上。 …

    JavaScript 2023年5月18日
    00
  • Javascript Array valueOf 方法

    以下是关于JavaScript Array valueOf方法的完整攻略。 JavaScript Array valueOf方法 JavaScript Array valueOf方法用于返回数组本身。该方法返回的是数组对象本身,而不是数组中的元素。 下面是一个使用valueOf方法的示例: var arr = [1, 2, 3, 4, 5]; console…

    JavaScript 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部