最近把前端面试小册看到了第11章jsonp那里。以前也查过jsonp相关的资料,但不是没有代码,就是代码太长或者专业废话太多,看得一脸懵。刚才总算是搞明白了,趁热用大白话来简单说下。

先上段简单的代码:

HTML:

<html>
<body><script>function yooo(data) {console.log(data)}</script><script src="http://127.0.0.1:18888/?callback=yooo" />
</body>
</html>
复制代码

Nodejs:

const http = require('http')
const url = require('url')
const data = {hello: 'world'}http.createServer((req, res) => {const params = url.parse(req.url, true)res.end( params.query.callback + '(' + JSON.stringify(data) + ')' )
}).listen(18888)
复制代码

把这些翻译成人话:

一开始HTML里的js代码是这样的

function yooo(data) { console.log(data) }
复制代码

然后解析到第二个<script>时,就会向Node发起请求,然后Node返回了'yooo({"hello", "world"})'这个字符串。经浏览器解析后,HTML里的js代码就变成了这样:

function yooo(data) { console.log(data) }
yooo({"hello", "world"})
复制代码

这个执行结果就很显然了吧,console里打印出{"hello", "world"}

没错,这就是jsonP的核心原理,就是这么简单。把数据包装在一个函数的参数里,然后传给浏览器,让浏览器执行这个函数(wrap data as an argument for a function, pass it to the browser, and then browser execute the function)

//总是说不明白中文术语。。。还是英文术语顺口些

回到jsonP这个名字本身,P -> Padding,这个padding指的就是包在json外面的'yooo('')'

现在你应该看得懂别人写的jsonP文章了,无非就是把上述东西包装成一个loadJSON函数,执行它的时候能自动给DOM插入个<script src="...?callback=xxx">,并且将这个xxx callback函数挂载到DOM上,比如window.xxx = xxx,这样子就可以在全局scope中执行xxx(data)了。

对了,最近在学习webpack4的时候发现,dynamic import其实也是用jsonP实现的。。。有兴趣的童鞋可以玩一下

用最简单直白的人类语言解释下jsonP到底是什么鬼相关推荐

  1. java反射通俗解释,谁来帮用通俗易懂的语言解释下java的反射机制

    谁来帮用通俗易懂的语言解释下java的反射机制以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 谁来帮用通俗易懂的语言解释 ...

  2. restapi是什么意思_用人类语言解释:REST API 与 RESTful API

    API,应用程序接口,也可以叫应用程序界面,或者简称为应用接口.应用程序的设计可以相当复杂,但最终的用户并不需要知道应用程序的内部到底是如何工作的,你只需要给用户提供一些操作接口,再告诉用户怎么用这些 ...

  3. 通俗易懂的语言解释下股票、基金、证券、债券、信托、期货、国债、外汇?

    股票 刚子是方圆十里周边村子最好的铁匠,尤其是打的一口好镰刀,村里的老少爷们都喜欢用他打的镰刀干活麻利,噶韭菜顺手,利索. 刚子暗恋村子西头的翠花,几次托人说媒,但是她妈是个势利眼,嫌弃一个穷铁匠没什 ...

  4. 什么是比特币之简单直白解释

    先看一下比较官方的释义 维基百科的解释是一种基于去中心化,采用点对点网络与共识主动性,开放源代码,以区块链作为底层技术的加密货币 简单直白一点解释就是 它是一种 货币,既满足经济学上的货币的一般概念( ...

  5. 揭开人类语言的神秘面纱:从理解到处理自然语言

    https://www.toutiao.com/a6709740042509615619/ 随着人工智能的进步和技术变得越来越复杂,我们希望现有的概念能够接受这种变化或者改变自己.同样,在自然语言的计 ...

  6. NLP≠NLU,机器学习无法理解人类语言

    来源:图灵人工智能  编译:吴彤 校对:暮 编辑:琰琰 长期以来,我们一直在与机器沟通:编写代码--创建程序--执行任务. 然而,这些程序并非是用人类"自然语言"编写的,像Java ...

  7. 语言编程思维陈萌_这本书告诉你,计算机为何能读懂人类语言,编程思维让你更聪明...

    在这个互联网时代,我们出门购物.拍照.打电话.浏览信息,只需要带上一部智能手机就可以了.如果在20年前,要实现这些功能,需要带一大堆东西.如今,我们口袋里的这台计算机,和50年前送宇航员上月球的那台计 ...

  8. 【深度学习人类语言处理】1 课程介绍、语音辨识1——人类语言处理六种模型、Token、五种Seq2Seq Model(LAS、CTC、RNN-T、Neural Transducer、MoChA)

    Deep Learning for Human Ianguage Processing 1. DLHLP-Introduction 1.1 概述 1.2 六种模型与应用 1.2.1 语音到文本 1.2 ...

  9. Computer:少儿编程—每个人都应该学习编程,它能教你如何思考—编程入门的简介(编程语言的特点种类开发工具对比人类语言)、编程应用、编程意义之详细攻略

    Computer:少儿编程-每个人都应该学习编程,它能教你如何思考-编程入门的简介(编程语言的特点&种类&开发工具&对比人类语言).编程应用.编程意义之详细攻略 导读:乔布斯说 ...

最新文章

  1. Apache POI:解决数据库和Excel之间相互转换的烦恼~
  2. 永远不要辞职,除非……
  3. python游戏创新大赛
  4. linux mail命令查看邮件/mail控制台
  5. YOLO_ Real-Time Object Detection 实时目标检测
  6. 百度2011大会见闻:百度开始推出耀主页
  7. github上面如何编辑README
  8. C语言,去你的策略模式!
  9. EXEC函数族的一般规律
  10. pandas 读表格_pandas电子表格的读取(pandas中的read_excel)
  11. 4g 中bis代表什么_BIS的完整形式是什么?
  12. rhel Linux 网络配置
  13. java 夏令时标志_夏令时随绝对日期而变化
  14. 一篇文章助你深入理解zookeeper
  15. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.6.6版)
  16. 彻底卸载删除微软Win10易升方法
  17. 常用电子元器件基础知识总结
  18. 【Research】Accounting-会计
  19. w10计算机网络标志不见了怎么办,Win10系统网络图标不见了怎么办?
  20. 机器学习 Cohen s Kappa,Quadratic Weighted Kappa 详解

热门文章

  1. 血淋淋的教训—将Vue项目打包成app的跨域问题
  2. CentOS平滑更新nginx版本
  3. Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
  4. PHP的学习--在sublime中使用XDebug(Ubuntu)
  5. HDU 1083 Courses 匹配
  6. c++ explicit构造函数[转]
  7. TFS环境搭建--添加新用户
  8. Linux如何搭建Java部署环境
  9. Alibaba代码规约插件使用IDEA
  10. 还在用Postman?来,花2分钟体验下ApiPost的魅力!