JSONP的问题与解决
来源:互联网 发布:php是什么货币 编辑:程序博客网 时间:2024/06/08 08:49
JSONP的问题与解决
我是一个刚实习没多久的前端工程师,前不久我遇到了一个技术难题,
这是一个ajax跨域访问引起的问题,经过网上各种查找学习,最后解决了这个问题。然后我整理并分享一下自己的所得,希望同样遇上这个问题的朋友能够在看了这篇文章后也能解决这个问题。
首先,为什么会显示错误:这是由于浏览器的同源策略—-它是一种约定,是浏览器最核心也最基本的安全功能,一般来说位于 www.example.com 的网页无法与不是 www.example.com的服务器沟通。
所谓同源是指,域名,协议,端口相同。
然后,什么是跨域: 一个域名下的文件去请求了和它不一样的域名下的资源文件,那么就会产生跨域请求,而由于同源策略的存在,就会导致上面的错误
嗯,接下来是解决方法,我主要针对我使用的JSOP来进行分享
JSONP,一看到这个词,大家肯定很容易联想到JSON,没错,JSONP是JSON的一种使用模式,它的全称是JSON with Padding,用于解决主流浏览器的跨域数据访问的问题。它利用 script 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP
- 比如我们写网站时,有时会使用CDN公共库,
<script src=""http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js>
,这就是一个跨越的访问,但并不会出现错误。
所以,我们可以使用script来加载数据,txt的内容是 var a = 123456
<script src="test.txt"></script>
<script type="text/javascript">
alert(a);
</script>
然后,打开网页可以看到弹出的内容123456,但是,JS应该尽可能的少申明全局变量,所以我们可以申明函数 <script type="text/javascript">
function callback(data){
alert(data);
}
</script>
<script src="test.txt"></script>
test.txt的内容 callback(1234)
总的来说
- 在数据加载之前,我们先定义一个函数,这个函数接收一个参数(数据)
- 再通过script标签加载对应远程文件资源,当远程的文件资源被加载时候,我们之前定义的函数就会被执行
例如,百度搜索用的就是跨域访问
在输入a之后,网络中发送了一条请求,整理之后就是记事本中的的链接,将它打开,可以看到
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=jQuery110206103742084975678_1482040945687
这就像我 test.txt 的内容一样,所以剩下的就是在接收数据之前申明一个函数(PS:jQuery110206103742084975678_1482040945687就是服务端返回的函数名,它是jQuery的ajax jsonp在发送请求中随机定义的一个函数,这里我们可以自定义函数名)
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=callback
<!DOCTYPE HTML><html><head><meta charset="UTF-8"><title>无标题文档</title><script type="text/javascript"> function callback(data){ var content = document.getElementById("test"); var html = ""; if (data.s.length) { for(var i=0;i<data.s.length;i++){ html += '<li><a href="">' + data.s[i] + '</a></li>'; } } content.innerHTML = html; } window.onload = function(){ var content = document.getElementById("test"); var sScript = document.createElement("script"); sScript.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=callback"; document.body.appendChild(sScript); } </script></head><body> <ul id="test"></ul></body></html>
最后,第一次写博客,有什么不足的地方请见谅,有什么没有考虑到的也欢迎各位指点
- JSONP的问题与解决
- JSONP解决跨域取数据的问题
- jsonp的解决ajax跨域问题
- 12.跨域问题的解决JSONP
- 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案
- 用jQuery与JSONP来解决跨域访问的问题
- 用jQuery与JSONP来解决跨域访问的问题
- 用jQuery与JSONP轻松解决跨域访问的问题
- 用jQuery与JSONP轻松解决跨域访问的问题
- 用jQuery与JSONP轻松解决跨域访问的问题
- 用jQuery与JSONP轻松解决跨域访问的问题
- 用jQuery与JSONP轻松解决跨域访问的问题
- 用jQuery与JSONP轻松解决跨域访问的问题
- $.ajax解决跨域问题 关于json与jsonp格式的区别
- 使用jQuery与JSONP解决跨域问题
- Node 解决跨域问题 JSONP与CORS
- jsonp解决跨域问题
- jsonp解决跨域问题
- Poedu_C语言提升_Lesson04_符号
- 利用Jquery实现http长连接(LongPoll)
- 电脑 长按 键盘 卡 解决方案
- Linux各目录及每个目录的详细介绍
- 自行封装android数据库操作工具类 DatabaseManger和DBHelper
- JSONP的问题与解决
- Oracle数据类型与.NET中的对应关系
- 周志华《机器学习》习题3.3
- mysql优化
- react仿京东客户端首页导航条动画效果
- 以AVL树为例理解二叉树的旋转(Rotate)操作
- 【C#】简易编码与解码小程序
- android stutio创建证书与打包APP上线、配制gradle中的证书,使用第三方平台SDK方便开发调试
- angular之$scope