跨域请求两种方法 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 相关文章推荐
正负小数点后两位浮点数实现原理及代码
Sep 06 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
JavaScript中的原始值和复杂值
Jan 07 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
Jan 12 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
JavaScript 高性能数组去重的方法
Sep 20 Javascript
关于vue里页面的缓存详解
Nov 04 Javascript
创建nuxt.js项目流程图解
Mar 13 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 Javascript
JS+CSS实现炫酷光感效果
Sep 05 Javascript
浅谈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开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
初识Laravel
2014/10/30 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
TypeScript入门-接口
2017/03/30 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python使用Scrapy爬取妹子图
2015/05/28 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
职业教育毕业生求职信
2013/11/09 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
购房委托书范本
2014/09/18 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
java executor包参数处理功能 
2022/02/15 Java/Android
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server