jsonp
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了jsonp,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2897字,纯文字阅读大概需要5分钟。
内容图文
![jsonp](/upload/InfoBanner/zyjiaocheng/1048/375082ba55dd423faa4e0bb4c89b88e2.jpg)
Ajax、同源策略、跨域
Ajax技术 Asynchronous JavaScript and XML (Ajax) 是Web2.0的关键技术。 Ajax允许在不干扰Web应用程序的显示和行为的情况下在后台进行数据检索。 使用XMLHttpRequest函数获取数据,它是一种API,允许客户端JavaScript 通过 HTTP 连接到远程服务器。 受浏览器限制,不允许跨域通信,即“同源策略限制” 同源策略 出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即“同源策略”。 所有的浏览器都遵守同源策略,这个策略能够保证一个源的动态脚本不能读取或操作其他源的http响应和cookie,这就使浏览器隔离了来自不同源的内容,防止它们互相操作。 同源是指协议、域名和端口都一致的情况。 跨域 跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果
第三方解决跨域
开启HTTP的Access-Control-Allow-Origin参数 只有当目标页面的response中,包含了 Access-Control-Allow-Origin 这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理。 Access-Control-Allow-Origin: http://run.jsbin.io # 允许 http://run.jsbin.io 跨域 Access-Control-Allow-Origin: * # * 表示允许任何域名跨域访问 nginx中解决跨域问题: add_header Access-Control-Allow-Origin *; # 可以接受所有的请求源(Origin),即接受所有跨域的请求。
JSONP
JSONP定义 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,而JSONP(JSON with Padding)则是JSON 的一种“使用模式”,通过这种模式可以实现数据的跨域获取。 JSONP跨域的原理 在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据,img、iframe、script等标签不受跨域影响,可以通过src属性请求到其他服务器上的数据 - JSONP 通过script标签不受跨域影响来实现跨域请求数据 - 正常地请求一个JSON数据,服务端返回的是一串JSON类型的数据,而我们使用JSONP模式来请求数据的时候,服务端返回的是一段可执行的JavaScript代码。
实例
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
1 url(r‘^jsonp$‘, views.jsonp), 2 url(r‘^req/$‘, views.req)
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
1 def jsonp(request): 2 print (request.GET) 3 func = request.GET.get(‘callback‘, list) 4return HttpResponse("%s(1000)" % func) 5 6 7import requests 8 9def req(request): 10# requests模块可获取url数据11 data = requests.get("https://www.sojson.com/open/api/weather/json.shtml?city=北京") 12# 定义字符编码13 data.encoding = "utf-8"1415 result = data.content.decode("utf-8") 16print(result) 17print(data.url) 18return render(request, ‘req.html‘, {‘result‘: result})
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
1 < body > 2 3 < p class ="xbt" >test</p> 4<p>{{ result }}</p> 5 6<p><input type="button" onclick="Jsonp1();" value="jsonp接口"></p> 7 8<p><input type="button" onclick="Ajax_jsonp();" value="ajax jsonp接口"></p> 910<script type="text/javascript" src="/static/jquery-3.3.1.min.js"></script>1112<script type="text/javascript">13// 方法一: 14function Jsonp1(){ 15var tag = document.createElement(‘script‘); 16 tag.src ="http://127.0.0.1:8000/blog01/jsonp?k1=v1&k2=v2&callback=Jsonp2"; 17 document.head.appendChild(tag); 18 document.head.removeChild(tag); 19 } 2021function Jsonp2(kwargs) { 22 console.log(kwargs) 23 } 2425// 方法二:26function Ajax_jsonp(){ 27 $.ajax({ 28//<QueryDict: {‘k1‘: [‘v1‘], ‘k2‘: [‘v2‘], ‘callback‘: [‘Jsonp2‘], ‘_‘: [‘1531722424120‘]}>29 url: ‘http://127.0.0.1:8000/blog01/jsonp?k1=v1&k2=v2‘, 30 type: ‘GET‘, 31 dataType: ‘jsonp‘, // 数据类型32 jsonp: ‘callback1‘, // 回调函数参数33 jsonpCallback: ‘Jsonp2‘, // 回调函数34 success: function (data, statusText, xmlHttpRequest) { 35 alert(data); 36 }, 37 error: function (error) { 38 console.log(123); 39 console.log(error); 40 } 41 }) 42 } 4344</script>45</body>
原文:https://www.cnblogs.com/sshcy/p/9319340.html
内容总结
以上是互联网集市为您收集整理的jsonp全部内容,希望文章能够帮你解决jsonp所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。