美文网首页
JSONP是什么

JSONP是什么

作者: JamHsiao_aaa4 | 来源:发表于2018-03-02 14:13 被阅读0次

https://segmentfault.com/a/1190000007935557

一、JSONP的诞生

首先,因为ajax无法跨域,然后开发者就有所思考

其次,开发者发现,标签的src属性是可以跨域的

把跨域服务器写成调用本地的函数,回调数据回来不就好了?

json刚好被js支持(object

调用跨域服务器上动态生成的js格式文件(不管是什么类型的地址,最终生成的返回值都是一段js代码

这种获取远程数据的方式看起来非常像ajax,但其实并不一样

便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP

传递一个callback参数给跨域服务端,然后跨域服务端返回数据时会将这个callback参数作为函数名来包裹住json数据即可。

二、老板,来一斤栗子。

【栗子一】

跨域服务器

文件:remote.js

代码:

alert('我是远程文件');

本地

这边做的就是直接引入一个js,页面将会弹出一个提示窗体,显示我是远程文件

【栗子二】

跨域服务器

文件:remote.js

代码:

localHandler({"result":"我是远程js带来的数据"});

本地

varlocalHandler =function(data){        alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:'+ data.result);    };

这边做的是

1、本地定义一个函数

2、引入一个js

3、被引入的js里面,调用这个函数

页面将会弹出一个提示窗体。显示本地函数被跨域的远程js调用成功,并且还接收到了我是远程js带来的数据

新问题出现了:让远程js知道它应该调用的本地函数叫什么名字呢?毕竟是jsonp的服务者都要面对很多服务对象,而这些服务对象各自的本地函数都不相同啊?

【栗子三】

跨域服务端提供的js脚本动态生成,这样调用者可以传一个参数过去告诉跨域服务端“我想要一段调用XXX函数的js代码,请你返回给我”,于是跨域服务器就可以按照客户端的需求来生成js脚本并响应了。

跨域服务器

文件:flightResult.php

代码:

flightHandler({"code":"CA1998","price":1780,"tickets":5});

本地

// 得到航班信息查询结果后的回调函数varflightHandler =function(data){        alert('你查询的航班结果是:票价 '+ data.price +' 元,'+'余票 '+ data.tickets +' 张。');    };// 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)varurl ="跨域服务器/flightResult.php?code=CA1998&callback=flightHandler";// 创建script标签,设置其属性varscript =document.createElement('script');    script.setAttribute('src', url);// 把script标签加入head,此时调用开始document.getElementsByTagName('head')[0].appendChild(script);

这次我们做的是

1、动态创建脚本

2、url中传递了一个code参数,服务器去做查询CA1998次航班的信息,callback参数告诉服务器,我的本地回调函数叫做flightHandler

3、跨域服务端调用这个函数flightHandler页面将会弹出一个提示窗体。把票价、余票以及张数给传递回来了。

三、那么服务器到底做了什么呢? 说到底,就是拼接字符串。

// 数据$data = ["name":"anonymous66","age":"18","like":"jianshu"];// 接收callback函数名称$callback = $_GET['callback'];// 输出echo$callback ."(". json_encode($data) .")";

四、与AJAX的区别是什么?

ajax和jsonp本质上是不同的东西。

ajax的核心是通过XmlHttpRequest获取非本页内容

jsonp的核心则是动态添加标签来调用服务器提供的js脚本

五、结语

本篇文章是对JSONP的原理扫盲,一般很多开发者会使用却不知道原理,这在学习和成长的路上不算好事。so,知道jsonp原理,你又可以加50块工资了。

相关文章

  • JSONP解决跨域的那些事

    JSONP是什么 JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest...

  • 你真的懂JSONP吗?

    JSONP是什么,在谷歌里面搜索JSONP,可以从维基百科里面得到它的定义: JSONP(JSON with Pa...

  • JSONP是什么

    前端操作数据库 首先,我们试着通过前端来操作一个数据库。数据库是什么?只要能长久的存数据,就是数据库。文件系统是一...

  • JSONP是什么

    https://segmentfault.com/a/1190000007935557 一、JSONP的诞生 首先...

  • JSONP是什么?

    介绍JSONP之前 ,我们先了解一下,页面数据交互的发展过程。来看下面一个例子。付款是我们日常中常见的一种金钱交易...

  • JSONP是什么

    JSONP(JSON with padding),服务器与客户端跨源通信的常用方法,可以让网页从别的网域获取数据。...

  • JSONP是什么?

    title: JSONP是什么?date: 2018-10-06 11:34:12tags: [JavaScrip...

  • jsonp是什么

    今天来跟大家讲讲故事,一个人很心酸的故事,jsonp是什么? 故事的背景起源于我们主管要求我完善的一个功能,在登录...

  • JSONP

    JSONP是什么 JSONP是通过动态创建 标签实现跨域数据访问的一种方法,JSON+Padding的缩写就是JS...

  • JSONP、JQuery发送AJAX、JSONP请求

    1.JSONP 2.JQuery发送AJAX、JSONP请求 1.JSONP JSONP利用JavaScript...

网友评论

      本文标题:JSONP是什么

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