JSONP 应用
受限于浏览器的同源安全策略, js 无法发起跨域的请求. 但是 HTML 中的 <script> 标签却可以引入跨域的文件使用. 而 JSONP 就是利用 <script> 的开源策略解决跨域问题的一种 JSON 的使用模式.
JSONP 抓取到的数据并不是 JSON, 而是任意可执行的 JS 代码.
JSONP 应用
服务器端代码
<?php
$info = ['type' => 'jsonp', 'msg' => '服务器端数据'];
$info = json_encode($info, JSON_UNESCAPED_UNICODE);
$callback = $_GET['jsonpCallback'];
// 此处相当于直接返回一句js代码: showData({type: "jsonp", msg: "服务器端数据"})
echo "{$callback}({$info})";
客户端代码
<script type="text/javascript">
function showData(data)
{
console.log(data);
}
</script>
// 获取到返回的js后开始执行
<script type="text/javascript" src="http://127.0.0.1:88/JSONP/getData?jsonpCallback=showData"></script>
上面的客户端代码在执行时等于:
<script type="text/javascript">
function showData(data)
{
console.log(data);
}
</script>
<script type="text/javascript">
showData({type: "jsonp", msg: "服务器端数据"})
</script>
JQuery 下的 JSONP 实现
客户端代码
服务器端代码不变, 客户端代码替换为:
<script type="text/javascript">
$.ajax({
url: 'http://127.0.0.1:88/JSONP/getData?jsonpCallback=showData',
type: 'get',
data: null,
dataType: 'jsonp',
async: false,
success: function(data)
{
console.log(data);
},
error: function(){}
}); function showData(data)
{
console.log(data);
}
</script>
或是
<script type="text/javascript">
$.ajax({
url: 'http://127.0.0.1:88/JSONP/getData',
type: 'get',
data: null,
dataType: 'jsonp',
jsonpCallback: 'showData', // 定义回调函数名, 没有此项, jQuery将提供一个随机函数名, 后端通过$_GET['callback']获取回调函数名
async: false,
success: function(data)
{
console.log(data);
},
error: function(){}
}); function showData(data)
{
console.log(data);
}
</script>
JSONP 应用的更多相关文章
- 实例操作JSONP原理
絮语:按这个步骤走,你就会明白JSONP是什么鬼. 1.工程目录: ng-mywork demo.html test.js 2.nginx的server配置 server { listen ; ser ...
- angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流
大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子
- 疯狂的JSONP
何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...
- 通过扩展让ASP.NET Web API支持JSONP
同源策略(Same Origin Policy)的存在导致了"源"自A的脚本只能操作"同源"页面的DOM,"跨源"操作来源于B的页面将会被拒 ...
- 跨域的jsonP
1.出现原因:因为web中的同源策略(域名,协议,端口号)限制了跨域访问. 2.区别于json (个人理解)json是数据交换格式,jsonp是数据通信中的交互方式 3.jsonp的get与p ...
- ASP.NET Web API 配置 JSONP
之前的一篇博文:jsonp跨域+ashx(示例) 1. 安装 Jsonp 程序集: PM> Install-Package WebApiContrib.Formatting.Jsonp PM&g ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 跨域之jsonp
我们都知道使用<script>标签可以引入外部的JS文件,即使这个JS文件来自于其他的网站,比如我们引用存放在网络服务器上的jQuery框架.在这个过程中,我们已经实现跨域访问.像< ...
- 由浅入深学习ajax跨域(JSONP)问题
什么是跨域?说直白点就是获取别人网站上的内容.但这么说貌似又有点混淆,因为通常我们用ajax+php就可以获取别人网站的内容,来看下面这个例子. 来看看跨域的例子,jquery+ajax是不能跨域请求 ...
- JSONP的诞生、原理及应用实例
问题: 页面中有一个按钮,点击之后会更新网页中的一个盒子的内容. Ajax可以很容易的满足这种无须刷新整个页面就可以实现数据变换的需求. 但是,Ajax有一个缺点,就是他不允许跨域请求资源. 如果我的 ...
随机推荐
- 【POJ 1275】 Cashier Employment(差分约束系统的建立和求解)
[POJ 1275] Cashier Employment(差分约束系统的建立和求解) Cashier Employment Time Limit: 1000MS Memory Limit: 10 ...
- iOS开发----iOS 8的虚化效果
在iOS 7中,一个重大的改变就是随处可见的虚化,这在通知中心和控制中心表现得尤为抢眼: 然而,当开发人员们着手去将类似的模糊效果增加自己的App的时候,他们会发现有相当严重的障碍. 那时苹果所界定的 ...
- 加载jQuery库
使用google <head> <script type="text/javascript" src="http://ajax.googleapis.c ...
- easyui图标对照
转自:https://blog.csdn.net/qq_34545192/article/details/78250816 原作者文章地址: http://www.cnblogs.com/timeme ...
- POJ 1659 Frogs' Neighborhood (贪心)
题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...
- E20170616-hm
transaction n. 交易,业务,事务; 办理,处理; (一笔) 交易,(一项)事务; (学会等的) 会议记录,学报; isolation n. 隔离; 孤独; 隔离状态; 孤立状 ...
- Unity资源的查找
Object.Destroy static function Destroy(obj: Object, t: float = 0.0F): void; Description Removes a ...
- Kafka详解与总结(七)-Kafka producer拦截器(interceptor)
1. 拦截器原理 Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑. 对于producer而言,interceptor ...
- NET 编程题
1.C#编写创建一个线程的代码 using System; using System.IO; using System.Threading ; class MyThread{ public int c ...
- [W3School]JavaScript教程学习
JavaScript 简介 JavaScript 是世界上最流行的编程语言.这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. JavaScript ...