跨域请求两种方法 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 相关文章推荐
收藏一些不常用,但是有用的代码
Mar 12 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
Sep 17 Javascript
javascript中数组的concat()方法使用介绍
Dec 18 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
BootStrap的两种模态框方式
May 10 Javascript
React Native使用fetch实现图片上传的示例代码
Mar 07 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
Vue.use()在new Vue() 之前使用的原因浅析
Aug 26 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
php中请求url的五种方法总结
2017/07/13 PHP
PHP _construct()函数讲解
2019/02/03 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
Python+django实现简单的文件上传
2016/08/17 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python 线程池用法简单示例
2019/10/02 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
运动会加油稿20字
2014/11/15 职场文书