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

那我来给您详细讲解一下如何理解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 2023年5月27日
    00
  • JQuery 动态扩展对象之另类视角

    JQuery 动态扩展对象之另类视角 在 Javascript 中,对象是一种灵活的数据类型,可以随意添加、删除、修改属性。JQuery 作为一个基于 Javascript 的库,提供了很多方便的方法和 API,其中一个非常常用的功能就是动态扩展对象。这篇文章将介绍 JQuery 中动态扩展对象的另一种视角,希望对初学者来说有所帮助。 对象的动态扩展 在 J…

    JavaScript 2023年6月10日
    00
  • 服务器安全设置的几个注册表设置

    接下来我将详细讲解“服务器安全设置的几个注册表设置”的完整攻略。 1. 前言 在保障服务器安全的过程中,调整服务器的注册表设置可以起到一定的作用。本文将结合示例,讲解几个比较常见的注册表设置,以帮助服务器管理员加强服务器的安全防护。 2. 禁用USB存储设备 为了防止外部用户携带的恶意软件通过USB存储设备传播到服务器上,可以通过禁用USB存储设备来增加服务…

    JavaScript 2023年6月11日
    00
  • Javascript Array toString 方法

    以下是关于JavaScript Array toString方法的完整攻略。 JavaScript Array toString方法 JavaScript Array toString方法用于将数组转换为字符串。该方法会将数组中的每个元素转换为字符串,并使用逗号分隔符将它们连接起来。 下面是一个使用toString方法的示例: var arr = [1, 2…

    JavaScript 2023年5月11日
    00
  • nodejs中实现阻塞实例

    实现阻塞实例需要用到Node.js中的核心模块fs和util。其中,fs模块用于读取文件内容,util模块中的promisify方法用于将回调函数转化为返回Promise对象的函数。 下面是一个完整的实现阻塞实例的攻略,包含两条示例说明: 1. 读取文件并输出内容 1.1 创建文件 首先,需要创建一个文件example.txt,并向其中写入一些内容。 ech…

    JavaScript 2023年5月28日
    00
  • ajax获取json数据为undefined原因分析

    当我们使用AJAX获取JSON数据时,有时会发现返回的数据无法解析,而返回的结果为undefined。这种情况通常是由于以下原因引起的: 数据格式不正确:JSON 格式要求数据必须为名/值对构成的无序集合。如果返回的数据格式不正确,就无法解析成JSON对象。 跨域请求:由于浏览器的同源策略限制,如果 AJAX 请求的数据源与当前域不一致,则会遇到跨域问题。这…

    JavaScript 2023年6月11日
    00
  • JS防抖节流函数的实现与使用场景

    JS防抖节流函数的实现与使用场景 什么是JS防抖和节流? 防抖:是指在一段时间内,多次触发同一事件,只执行一次函数。即当一连串的操作被触发时,只有最后一个操作被执行而前面的操作都被忽略了。 节流:是指在一段时间内,多次触发同一事件,只执行一次函数。即在规定的时间内,重复触发只会响应一次,并阻止事件触发后一段时间内的操作。 防抖函数实现及使用场景 实现 fun…

    JavaScript 2023年6月11日
    00
  • JavaScript 开发规范要求(图文并茂)

    JavaScript开发规范要求(图文并茂) 简介 JavaScript是一门非常灵活的语言,灵活性也为其带来了使用难度,所以为了保证代码的品质和可维护性,一些好的JavaScript开发规范是必不可少的。 为此,本文将详细介绍旨在提高JavaScript代码品质和可维护性的开发规范要求。 代码组织 引入顺序 首先,我们应该根据引入类型将脚本分成3个部分: …

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