跨域请求两种方法 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 建设银行登陆键盘
Jun 10 Javascript
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
javascript获取文档坐标和视口坐标
May 26 Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
Mar 30 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
May 10 Javascript
深入理解JavaScript 函数
Jun 06 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
Jun 30 Javascript
canvas学习之API整理笔记(一)
Dec 29 Javascript
js中的数组对象排序分析
Dec 11 Javascript
详解Vue demo实现商品列表的展示
May 07 Javascript
VueX模块的具体使用(小白教程)
Jun 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
javascript GUID生成器实现代码
2009/10/31 Javascript
javascript整除实现代码
2010/11/23 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
javascript每日必学之封装
2016/02/23 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
vue项目实战总结篇
2018/02/11 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
简单讲解Python中的闭包
2015/08/11 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python BS4库的安装与使用详解
2018/08/08 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
临床医学应届生求职信
2013/11/06 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
护士工作心得体会
2016/01/25 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB