当前位置: 首页 > 面试题库 >

什么是JSONP,为什么创建它?

胡玉书
2023-03-14
问题内容

我了解JSON,但不了解JSONP。Wikipedia上有关JSON的文档是JSONP的最高搜索结果。它说:

JSONP或“带填充的JSON”是JSON扩展,其中将前缀指定为调用本身的输入参数

??什么电话 这对我来说毫无意义。JSON是一种数据格式。没有电话

在第二个搜索结果是由某些人叫雷米,谁写的这个约JSONP:

JSONP是脚本标记注入,它将响应从服务器传递到用户指定的函数。

我可以理解这一点,但这仍然没有任何意义。

那么JSONP是什么?为什么创建它(它解决了什么问题)?我为什么要使用它?

附录 :我刚刚在Wikipedia
上为JSONP创建了一个新页面。根据jvenema的回答,它现在对JSONP有了清晰而透彻的描述。


问题答案:

实际上并不太复杂…

假设您正在使用域 example.com ,并且想向域发出请求 example.net 。要做到这一点,你需要 跨域
边界,一个 没有没有 在大多数browserland的。

绕过此限制的一项是<script>标签。使用脚本标记时,将忽略域限制,但是在正常情况下,您实际上无法对结果 执行
任何操作,只是对脚本进行了评估。

输入 JSONP
。当您向启用JSONP的服务器发出请求时,您将传递一个特殊参数,该参数告诉服务器有关您页面的一些信息。这样,服务器就可以用页面可以处理的方式很好地包装其响应。

例如,假设服务器需要一个名为的参数 callback 来启用其JSONP功能。然后您的请求将如下所示:

http://www.example.net/sample.aspx?callback=mycallback

没有JSONP,这可能会返回一些基本的JavaScript对象,如下所示:

{ foo: 'bar' }

但是,使用JSONP,当服务器接收到“ callback”参数时,它会以不同的方式包装结果,返回如下所示:

mycallback({ foo: 'bar' });

如您所见,它现在将调用您指定的方法。因此,在页面中,您定义了回调函数:

mycallback = function(data){
  alert(data.foo);
};

现在,加载脚本后,将对其进行评估,然后将执行您的函数。瞧,跨网域要求!

值得注意的是JSONP的一个主要问题:您失去了对请求的大量控制。例如,没有“不错”的方法来找回正确的故障代码。结果,您最终会使用计时器来监视请求等,这总是让人怀疑。JSONRequest的主张是一个很好的解决方案,它允许跨域脚本编写,维护安全性并允许对请求的适当控制。

如今(2015年),与JSONRequest相比,CORS是推荐的方法。JSONP对于较旧的浏览器支持仍然有用,但是考虑到安全隐患,除非您别无选择,否则CORS是更好的选择。



 类似资料:
  • 问题内容: 我了解JSON,但不了解JSONP。Wikipedia上有关JSON的文档是JSONP的最高搜索结果。它说: JSONP或“带填充的JSON”是JSON扩展,其中将前缀指定为调用本身的输入参数。 ??什么电话 这对我来说毫无意义。JSON是一种数据格式。没有电话 在第二个搜索结果是由某些人叫雷米,谁写的这个约JSONP: JSONP是脚本标记注入,它将响应从服务器传递到用户指定的函数。

  • 主要内容:同源策略,什么是 JSONP?,如何实现 JSONP,总结JSONP 不是一门编程语言,也不是什么特别的技术,它更像一个漏洞,程序员可以利用这个漏洞,实现跨域(可以简单理解为跨域名)传输数据。虽然 JSONP 与 JSON 看起来很像,但它们却是完全不同的,本节我们就来简单介绍以下 JSONP。 在介绍 JSONP 之前,先来介绍一下浏览器的同源策略。 同源策略 同源策略是由 Netscape(网景)提出的一个著名的安全策略,所有支持 JavaScrip

  • 本文向大家介绍JSONP的原理是什么?解决什么问题?相关面试题,主要包含被问及JSONP的原理是什么?解决什么问题?时的应答技巧和注意事项,需要的朋友参考一下 JS 动态插入 script 并将 src 指向后端 API,后台返回 json 并使用协定的 callback 函数把 json 包起来。浏览器以 JS 内容解析执行返回的内容,回调函数得以被调用并传入了返回的 json 对象。 解决的是

  • 每一个国家的都有其特殊国情,主要是原因是中国的网络太慢,及中国存在大量老旧的计算机,它们预装着window XP,IE浏览器最高只能升级到IE8, 出于这两方面的原因,我们需要一个体积更少,兼容性更好的React。并且之前facebook也闹过LICENSE问题,更是促进中国互联网公司决定自主研发框架,努力摆脱对外国框架的依赖。 对于我们公司而言,一个旅游公司, 在线上订火车票,飞机票, 景点门票

  • 问题内容: 我经常在PHP中看到包含include.inc文件的示例。.inc是什么意思?它的作用是什么?使用它的缺点和优点是什么? 问题答案: 它没有任何意义,只是一个文件扩展名。如果扩展名是.inc的文件被设计为包含在其他PHP文件中,这是某些人的惯例,但这只是惯例。 它确实存在一个可能的缺点,即通常没有将服务器配置为将.inc文件解析为php,因此,如果该文件位于您的Web根目录中,并且您的

  • Bootstrapping(引导) 是 Netty 中配置程序的过程,当你需要连接客户端或服务器绑定指定端口时需要使用 Bootstrapping。 如前面所述,Bootstrapping 有两种类型,一种是用于客户端的Bootstrap,一种是用于服务端的ServerBootstrap。不管程序使用哪种协议,无论是创建一个客户端还是服务器都需要使用“引导”。 面向连接 vs. 无连接 请记住,这