跨域请求两种方法 jsonp和cors的实现


Posted in Javascript onNovember 11, 2018

在网站后台跨域访问另一服务器时,若被访问服务器未设置response[‘Access-Control-Allow-Origin'] = ‘*' 那么将无法获取。

jsonp方法

伪造ajax提交请求

请求端

// 基于jsonp
 // 原理: ajax 不能直接跨域 。 
 //向html中加入script标签 含有访问路径,script标签直接访问路径达到效果
 $('.get_service2').click(function () {

  // 伪造ajax提交请求
  $.ajax({
   url:'http://127.0.0.1:8001/service/',
   type: 'get',
   dataType: 'jsonp', // 伪造ajax 基于script
   jsonp: 'callbacks',
   // 随机取一个函数名发给请求方,对方解析好后返回过来
   success: function (data) {
    console.log(data)
   }
  })

 });

服务端

import json

def service(request):
 # 等待请求返回json数据
 func = request.GET.get('callbacks') # 固定方法名jsonp
 info = {'name': 'zok', 'age': 18}

 return HttpResponse("%s('%s')" % (func, json.dumps(info)))

jsonp获电视台节目案例

取到后并渲染到页面上

// 实例基于jsonp 电视台节目获取
  $('.get_service3').click(function () {

  // 伪造ajax 基于script
  $.ajax({
   url:'http://www.jxntv.cn/data/jmd-jxtv2.html',
   type: 'get',
   dataType: 'jsonp', // 伪造ajax 基于script
   jsonp: 'callbacks',
   jsonpCallback: 'list', // 拼函数名,如果不写就随机发一个函数名,对面解析好发回来

   success: function (data) {
    var html=""; //自己拼接

    // 循环取出数据 index 索引计次,weekday 每一天 必须要2个参数
    $.each(data.data,function (index, weekday) {
     //取到每天的数据
     html+='<p>'+weekday.week+'</p>';
     $.each(weekday.list,function (i,show) {
      html+='<a href='+show.link+'>'+show.name+'</a></br>'
     })
    });
    $('body').append(html)
   }
  })
 })

cors 最简单的方法

需要在服务端上加入白名单ponse[‘Access-Control-Allow-Origin'] = ‘*' 设置好能正常传送的ip

服务端

def serviceCors(request):
 """
 基于cors跨域
 白名单域名
 """
 info = {'name': 'zok', 'age': 18}
 response = HttpResponse(json.dumps(info))
 # 设置指定ip 或 * 全部通过
 response['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8000' 
 response['Access-Control-Allow-Origin'] = '*'
 return response

请求端

// cors 跨域请求,方法最简单
 $('.get_service1').click(function () {
  $.ajax({
   url:'http://127.0.0.1:8001/serviceCors/',
   type:'get',
   success:function (data) {
    console.log(data)
   }
  })
 });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 获取事件对象的注意点
Jul 29 Javascript
javascript数组去重方法终极总结
Jun 05 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 Javascript
JavaScript结合HTML DOM实现联动菜单
Apr 05 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
Javascript实现异步编程的过程
Jun 18 Javascript
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 Javascript
jQuery实现影院选座订座效果
Apr 13 jQuery
浅谈webpack+react多页面开发终极架构
Nov 11 #Javascript
Vue项目引进ElementUI组件的方法
Nov 11 #Javascript
webpack中如何使用雪碧图的示例代码
Nov 11 #Javascript
vue组件从开发到发布的实现步骤
Nov 11 #Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 #Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 #Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
Nov 11 #Javascript
You might like
php中目录,文件操作详谈
2007/03/19 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
php把session写入数据库示例
2014/02/26 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
小结Python用fork来创建子进程注意事项
2014/07/03 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
研究生求职自荐书
2014/06/23 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
Python合并多张图片成PDF
2021/06/09 Python
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技