博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonp原理
阅读量:6227 次
发布时间:2019-06-21

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

今天对象问了我jsonp的问题,我就顺便学习了一下josnp。

我们知道普通的ajax,在跨域访问数据时会报以下错误

我们发现在引用js时可以跨域,不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>。

jsonp也就是利用了<script>的这个特性来实现跨域的。

具体例子如下:

在页面上添加了一个showDetail方法,然后我们用原生的jsonp来请求数据,代码如下:

注意上面src地址的callback参数,他是指定了一个我们已经定义好的一个方法。

这里将接口地址放在了<script>的src中,因为<script>不会出现跨域的问题,这样就可以请求到数据

我的接口代码如下:

public HttpResponseMessage Get(int id, string callBack)        {            var data = new            {                Id=id,                Name="Jack",                Age=24            };                        return new HttpResponseMessage            {                Content = new StringContent($"{callBack}({JsonConvert.SerializeObject(data)})")            };        }

看这个地方的代码:$"{callBack}({JsonConvert.SerializeObject(data)})"

其实我们就是返回了一个类似这样的数据:

callBackMethod({"Id":1,"Name":"name"})

最后将请求到的这些数据放在<script>中,得到以下内容:

callBackMethod({"Id":1,"Name":"name"})
 

当这个<script>加载完成后,就开始调用callBackMethod方法,这是咱们已经定义好的方法,这样我们就取到了数据,实现了跨域。

这就是jsonp的原理,使用<script>来实现跨域。

但是我们要是每次用jsonp都得定义一个callback很麻烦,jquery帮我们封装好了,我们直接用下面代码就可以实现跨域功能

在ajax中添加:dataType:'jsonp',就可以实现跨域,我们不用定义callBack方法。 调试发现,jquery会自动给callback赋值,如下图:

了解了jsonp的原理后,就明白jquery的dataType:'jsonp'了

以上是根据自己的理解,希望对大家有帮助

 

 

 

转载于:https://www.cnblogs.com/taohonggou/p/7011690.html

你可能感兴趣的文章
FreeRTOS 特性简介
查看>>
Linux--前后端分离部署
查看>>
java阶段学习目标
查看>>
Azure IoT 技术研究系列2
查看>>
day24-3-2子类继承构造方法
查看>>
我们一起学习WCF 第五篇数据协定和消息协定
查看>>
Linux 与 Windows 文件互传(VMWare)
查看>>
Python学习笔记八 面向对象高级编程(一)
查看>>
Oracle内置函数
查看>>
UVA 1645 Count
查看>>
贪吃蛇程序
查看>>
poj 1419 Graph Coloring
查看>>
node的安装及其运用及相关配置
查看>>
第19篇 2016年计划
查看>>
左连接,右连接,内连接
查看>>
Django+element ui前后端不分离的博客程序
查看>>
托福听力
查看>>
2018-2019-1 20165302 《信息安全系统设计基础》第四周学习总结
查看>>
类似百度图片排版效果
查看>>
【学习笔记】DataTable根据多列分组
查看>>