博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonp是什么
阅读量:7041 次
发布时间:2019-06-28

本文共 1431 字,大约阅读时间需要 4 分钟。

转自 http://mp.weixin.qq.com/s/xNnKAeLv6sO0T-IvP2AUlQ          JavaScript微信公众号

一、JSONP的诞生

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

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

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

  • json刚好被js支持(object)

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

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

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

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

二、老板,来一斤栗子。

【栗子一】
跨域服务器
文件:remote.js 代码:alert('我是远程文件');本地这边做的就是直接引入一个js,页面将会弹出一个提示窗体,显示 我是远程文件。

 

【栗子二】
跨域服务器
文件:remote.js 代码:localHandler({
"result":"我是远程js带来的数据"});本地这边做的是 1、本地定义一个函数 2、引入一个js 3、被引入的js里面,调用这个函数页面将会弹出一个提示窗体。显示本地函数被跨域的远程js调用成功,并且还接收到了 我是远程js带来的数据。 新问题出现了:让远程js知道它应该调用的本地函数叫什么名字呢?毕竟是jsonp的服务者都要面对很多服务对象,而这些服务对象各自的本地函数都不相同啊?

 

【栗子三】

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

跨域服务器
文件:flightResult.php 代码:flightHandler({   "code":"CA1998",   "price": 1780,   "tickets": 5});本地

 

这次我们做的是 

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的核心则是动态添加<script>标签来调用服务器提供的js脚本。

转载于:https://www.cnblogs.com/guojikun/p/6237033.html

你可能感兴趣的文章
工作中常用的 Linux 命令
查看>>
English Corner
查看>>
(最短路 SPFA)Invitation Cards -- poj -- 1511
查看>>
两数相加LeetCode
查看>>
列表生成 加1四种方法
查看>>
springboot 处理后端long传给前端精度丢失问题
查看>>
[译文]扩展Repeater控件以支持DataPager分页
查看>>
88. Merge Sorted Array
查看>>
java抽象类和接口区别
查看>>
构建Ruby开发环境(Windows+Eclipse+Aptana Plugin)
查看>>
Miao Xian 隐私政策
查看>>
三维实景下的南极科考站是什么样子?
查看>>
Linux利用scp命令来进行文件复制
查看>>
【LabVIEW技巧】你可以不懂OOP,却不能不懂封装
查看>>
《Programming in Lua 3》读书笔记(十五)
查看>>
PHP读取xlsx Excel 文件
查看>>
R语言模型中的加总偏误与内生性:一种数值模拟方法
查看>>
ajax进error的原因
查看>>
[数据结构]浅谈哈希表的冲突避免策略
查看>>
python全栈考试作业 2017-03-30
查看>>