JSONP是什么
一、JSONP的诞生首先,因为ajax无法跨域,然后开发者就有所思考 二、老板,来一斤栗子。【栗子一】 跨域服务器 文件:remote.js alert('我是远程文件');
本地 <script type="text/javascript" src="跨域服务器/remote.js"></script>
这边做的就是直接引入一个js,页面将会弹出一个提示窗体,显示 我是远程文件。 【栗子二】 跨域服务器 文件:remote.js localHandler({"result":"我是远程js带来的数据"});
本地 <script type="text/javascript"> var localHandler = function(data){ alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:' + data.result); }; </script>
<script type="text/javascript" src="跨域服务器/remote.js"></script>
这边做的是 页面将会弹出一个提示窗体。显示本地函数被跨域的远程js调用成功,并且还接收到了 我是远程js带来的数据。 【栗子三】 跨域服务端提供的js脚本动态生成,这样调用者可以传一个参数过去告诉跨域服务端“我想要一段调用XXX函数的js代码,请你返回给我”,于是跨域服务器就可以按照客户端的需求来生成js脚本并响应了。 跨域服务器 文件:flightResult.php flightHandler({ "code":"CA1998","price": 1780,"tickets": 5 });
本地 <script type="text/javascript"> // 得到航班信息查询结果后的回调函数 var flightHandler = function(data){ alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。'); }; // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码) var url = "跨域服务器/flightResult.php?code=CA1998&callback=flightHandler"; // 创建script标签,设置其属性 var script = document.createElement('script'); script.setAttribute('src',url); // 把script标签加入head,此时调用开始 document.getElementsByTagName('head')[0].appendChild(script); </script>
这次我们做的是 三、那么服务器到底做了什么呢? 说到底,就是拼接字符串。// 数据
$data = [
"name":"anonymous66","age":"18","like":"jianshu"
];
// 接收callback函数名称
$callback = $_GET['callback'];
// 输出
echo $callback . "(" . json_encode($data) . ")";
四、与AJAX的区别是什么?ajax和jsonp本质上是不同的东西。 转载自:http://www.52php.cn/article/p-pchnpqyn-d.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |