跨域请求两种方法 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 相关文章推荐
JScript的条件编译
May 29 Javascript
获取body标签的两种方法
Oct 13 Javascript
JS对象与JSON格式数据相互转换
Feb 20 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
Dec 23 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
浅析Javascript中bind()方法的使用与实现
Apr 29 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
分析javascript原型及原型链
Mar 18 Javascript
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
vue + typescript + 极验登录验证的实现方法
Jun 27 Javascript
Vant picker 多级联动操作
Nov 02 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多线程下载远程多个文件
2013/06/25 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
小程序实现多选框功能
2018/10/30 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
python练习程序批量修改文件名
2014/01/16 Python
实例讲解python函数式编程
2014/06/09 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python编写一个优美的下载器
2018/04/15 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
实习自荐信
2013/10/13 职场文书
初婚初育证明
2014/01/14 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
小学班级特色活动方案
2014/08/31 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书