美文网首页
2018.11.08 JSONP简介

2018.11.08 JSONP简介

作者: 爽爽ing | 来源:发表于2018-11-09 08:47 被阅读0次

JSONP的基本思想是,网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来

当通过<script>元素调用数据时,响应内容必须用javascript函数名和圆括号包裹起来。而不是发送这样一段JSON数据,这就是JSONP中P的意义所在

[1, 2, {"buckle": "my shoe"}]

JSONP看起来与JSON差不多,只不过是被包含在函数调用中的JSON,它会发送这样一个包裹后的JSON响应:

handleResponse([l, 2, {"buckle": "my shoe"}])

包裹后的响应会成为<script>元素的内容,它先判断JSON编码后的数据,然后把它传递给handleResponse()函数

在实践中,支持JSONP的服务不会强制指定客户端必须实现的回调函数名称,比如handleResponse。相反,它们使用査询参数的值,允许客户端指定一个函数名,然后使用函数名去填充响应。许多支持JSONP的服务都能分辨出这个参数名。另一个常见的参数名称是callback,为了让使用到的服务支持类似特殊的需求,就需要在代码上做一些修改了

JSONP由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的JSON数据

[http://freegeoip.net/json/?callback=handleResponse](http://freegeoip.net/json/?callback=handleResponse)

这个URL是在请求一个JSONP地理定位服务。通过査询字符串来指定JSONP服务的回调参数是很常见的,就像上面的URL所示,这里指定的回调函数的名字叫handleResponse()

JSONP是通过动态<script>元素来使用的,使用时可以为src属性指定一个跨域URL。这里的<script>元素与<img>元素类似,都有能力不受限制地从其他域加载资源。因为JSONP是有效的javascript代码,所以在请求完成后,即在JSONP响应加载到页面中以后,就会立即执行

?

|

1

2

3

4

5

|

function handleResponse(response){

alert (``"You're at IP address " + response.ip + ", which is in " + response.city + ", "``+ response.region_name);

}

var script = document.createElement(``"script"``);

script.src = "[http://freegeoip.net/json/?callback=handLeResponse](http://freegeoip.net/json/?callback=handLeResponse)"``; document.body.insertBefore(script, document.body.firstChild);

|

JSONP之所以在开发人员中极为流行,主要原因是它非常简单易用,老式浏览器全部支持,服务器改造非常小。与图像Ping相比,它的优点在于能够直接访问响应文本,支持在浏览器与服务器之间双向通信

使用<script>元素进行Ajax传输,不受同源策略的影响,因此可以使用它们从其他的服务器请求数据;而且,包含JSON编码数据的响应体会自动解码(即执行)

不过,JSONP也有两点不足:首先,JSONP是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了完全放弃JSONP调用之外,没有办法追究。因此在使用不是自己运维的Web服务时,一定得保证它安全可靠;其次,要确定JSONP请求是否失败并不容易。虽然HTML5给<script>元素新增了一个onerror事件处理程序,但目前还没有得到任何浏览器支持。为此,开发人员不得不使用计时器检测指定时间内是否接收到了响应。但就算这样也不能尽如人意,毕竟不是每个用户上网的速度和带宽都一样

相关文章

  • 2018.11.08 JSONP简介

    JSONP的基本思想是,网页通过添加一个 元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求...

  • Java高级技术day84:JsonP和HttpClient

    一、Jsonp的简介 1.什么是 JsonP? Jsonp(JSON with Padding) 是 json 的...

  • Jsonp学习笔记

    一、Jsonp简介 1.什么是Jsonp Jsonp(JSON with Padding)是json的一种“使用模...

  • 2018.11.08

    昨天没写日记 挺丧的 不知道改写些什么 哦 对了 终于把内在美中国版剪了 我还是那个冲动的不顾一切去做自己喜欢...

  • 2018.11.08

    今早一醒来,感觉头部有振动的痛感,不敢说我的精神与内心现在到底有多强大,肉体现在是真的满脆弱了!自从16那...

  • 2018.11.08

    今天上午10.50,从北京回到广州。 在这个城市的自己,并没有工作。 我不知道应该从事什么为好。 这种状态也不知道...

  • 2018.11.08

    睡着了又醒了差点忘记写简书,今天这么冷,特别感谢加我接我单页的仙女们。 也没什么想说的了,太困了,晚安

  • 2018.11.08

    习惯是一种可怕的力量。不要被任何人束缚,不要被任何期望束缚。 没有人可以决定你,只有你自己。

  • 2018.11.08

    今早八点到下午四点,一直在忙着给今年考研的同学们现场确认。看着他们确认时认真的样子,真的希望他们都能考上!然后四点...

  • 2018.11.08

    嗓音真是个有趣的东西。 开学两个月,朋友们对我说的最多的就是:"你调好高啊!""啊?是嘛?"我很是诧异。她们随后就...

网友评论

      本文标题:2018.11.08 JSONP简介

      本文链接:https://www.haomeiwen.com/subject/qtrnxqtx.html