jsonp格式前端发送和后台接受写法的代码详解


Posted in Javascript onNovember 07, 2019

什么是JSONP?

先说说JSONP是怎么产生的:

其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题,看看是否有帮助。

1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;

2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);

3、于是可以判断,当前阶段如果想通过纯web端(ActiveX控件、服务端代理、HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;

4、恰巧我们已经知道有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,更妙的是JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据;

5、这样子解决方案就呼之欲出了,web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。

6、客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。

7、为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

什么是JSON?

前面简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点。

JSON的优点:

1、基于纯文本,跨平台传递极其简单;

2、Javascript原生支持,后台语言几乎全部支持;

3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;

5、容易编写和解析,当然前提是你要知道数据结构;

JSON的缺点当然也有,但在作者看来实在是无关紧要的东西,所以不再单独说明。

好了,回归正题,

jsonp是ajax提交的一种格式不会受跨域限制

一.前端发送

<button>11111</button>
<script src="https://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>
<script>
  document.querySelector('button').onclick = function () {
    $.ajax({
      url: 'http://localhost:8000/test',
      type: 'get',
      dataType: 'jsonp',
      data: {      //注意内容必须为字典
        aaa:aaa    //字典里内容前面key可以不加"",默认会给你加上""变成字符串但是不会当成变量
      },         //字典后面value有''为字符串,没有为变量
      success: function (data) {
        console.log(data);
      }
    });
  }
</script>

二.后台接受

#我就拿python举例,其他也大同小异
from django.shortcuts import render,HttpResponse,redirect
def test(request):
  callback=request.GET.get('callback')
  print(dict(request.GET)) #传过来的内容他会打散,具体的自己看一下就知道
  
  #注意点返回的字符串必须是 'callback+("返回的字符串")' 这样的一个字符串,不然前端不会接收
  return HttpResponse(callback+'("ok")')

总结

以上所述是小编给大家介绍的jsonp格式前端发送和后台接受写法的代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JQuery读取XML文件数据并显示的实现代码
Dec 16 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
Sep 28 Javascript
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
jQuery简单图表peity.js使用示例
May 02 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
Aug 18 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
Dec 13 Javascript
js生成1到100的随机数最简单的实现方法
Feb 07 Javascript
vue路由实现登录拦截
Mar 24 Vue.js
Canvas跟随鼠标炫彩小球的实现
Apr 11 Javascript
js实现数字从零慢慢增加到指定数字示例
Nov 07 #Javascript
详解Angular cli配置过程记录
Nov 07 #Javascript
ZK中使用JS读取客户端txt文件内容问题
Nov 07 #Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 #Javascript
vue中 数字相加为字串转化为数值的例子
Nov 07 #Javascript
JS实现随机抽选获奖者
Nov 07 #Javascript
Vue中错误图片的处理的实现代码
Nov 07 #Javascript
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python json模块使用实例
2015/04/11 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python玩转Excel的读写改实例
2019/02/22 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
Linux文件系统类型
2012/09/16 面试题
事业单位个人应聘自荐信
2013/09/21 职场文书
建筑专业自我鉴定
2013/10/22 职场文书
收银员岗位职责
2014/02/07 职场文书
物理教学随笔感言
2014/02/22 职场文书
python如何正确使用yield
2021/05/21 Python
Redis分布式锁的7种实现
2022/04/01 Redis
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis