位置: 编程技术 - 正文

用jQuery.ajaxSetup实现对请求和响应数据的过滤

编辑:rootadmin

推荐整理分享用jQuery.ajaxSetup实现对请求和响应数据的过滤,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

不知道同学们在做项目的过程中有没有相同的经历呢?在使用 ajax 的时候,需要对请求参数和响应数据进行过滤处理,比如你们觉得就让请求参数和响应信息就这么赤裸裸的在互联网里来回的穿梭,比如这样:

要知道,在浩瀚的互联网中,所有的信息都是不安全的,万一有人偷窥我们怎么办?!万一被别人看见了我们的美体,偷窥到了我们的私处,然后以此威胁我们,岂不是太难堪了不是?这时,你或许会想给请求数据和响应数据加密,就相当于给我们的数据穿上了一层衣服。于是我们这样:

是不是美美哒,对,穿上一层漂漂亮亮的衣服,就不怕别人偷窥我们的美体了,我们出门的时候要穿衣服,回家的时候也要脱衣服,也就是说ajax请求的参数需要加密,ajax响应的数据的要解密,如果说项目只有几个ajax请求需要加密的话还OK,发请求之前把data处理一遍,success回调函数把responseText解密一遍就完了。可是倘若架构大一点,ajax请求多一点,每次请求响应都要单独处理加密解密启不是太冗余了,于是我便去翻阅jQuery ajax参考手册,还真的有不小的收获。

首先jQuery有一个 ajaxSetup 方法,该方法可以设置全局 ajax 初始化参数,也就是说在声明了该方法之后的所有 ajax 请求都会默认使用该方法设置的初始值。

然后我们再翻阅 ajax 参数,突然,我眼前一亮!有一个叫做 beforeSend 的方法,我一看这名字就亮了!这个函数也就是在发送 ajax 请求之前的回调函数,于是我们先把它用起来:

然后我们在随便发一个 ajax 请求:

在控制台我们可以看见打印的参数列表有两个对象,我们先来看看 W3C 里对 beforeSend 的解释:

beforeSend(XHR) 类型:Function 发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。 XMLHttpRequest 对象是唯一的参数。 这是一个 Ajax 事件。如果返回 false 可以取消本次 ajax 请求。

实际上这里是不对的,因为XHR不是唯一的参数,XHR只是 arguments[0] ,我们还有一个 arguments[1],我们来看看这是什么东西:

以下是在 Firefox Developer Edition(Firefox 的开发者版本,最近发现的,绝得超好用) 中打印的东西:

看到这里我们大致明白了,我们这个对象大致就是 ajax 的参数对象,由于我们本次实验的目的是给我们将要在互联网中遨游的数据穿衣服,那么我们看看这个衣服该穿在哪呢?在这个对象的 url 我们可以看到,jQuery 的 ajax 操作已经我们之前传进来的参数序列化并附加在了 url 后面,因为这是 GET 请求。那么 POST 请求长什么样呢?我们再来试一下:

现在这个参数对象长这个样子:

我们可以看到不同之处在于 POST 请求多了一个 data 属性,并且 url 后面没有参数序列化字符串,但是 data 属性却是序列化之后的参数字符串。至此我们已经可以在 beforeSend 函数中对请求前的参数进行修改了,GET 请求修改 url 后面的参数,POST 请求修改 data 中的值,具体效果在这里暂时不演示。

但是到这里我依旧不是很爽啊,因为无论是 GET 还是 POST 的,我得到的都是序列化之后的字符串,要修改参数的话得先反序列化,然后才能处理,于是我又在 ajax API 当中寻找,功夫不负有心人,我找到了一个叫做 processData 的东西,先来看看官方解释:

processData 类型:Boolean 默认值: true。默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。

也就是说默认情况下 jQuery 会自动帮我们把参数序列化,那么我们现在把它设置为 false 看看会发生什么:

这时请求中的参数会发生如下变化

GET:

POST:

用jQuery.ajaxSetup实现对请求和响应数据的过滤

这里我只截取部分截图,我们看到我们传进来的参数在 POST 请求就是原生的对象,终于得到我想要的东西了,此时此刻我心中大喜!必须得抽根烟祝祝性,额不对...是祝祝兴。于是我们可以拿这个 data 尽情的蹂躏,随意的鞭打,我要把这个 data 对象尽情的践踏!额,不好意思有点激动。回到正题,我们要给 data 穿衣服才对嘛,怎么说着说着就要开始脱衣服了...好的,下面我们开始穿衣服,在这里我以 base 举例,我对请求的参数进行 base 编码:

于是乎,我们的请求参数就穿上了一身漂漂亮亮的衣服遨游在互联网的世界里了,因为 jquery 在 GET 方法中会自动把 data 附加在 url 后面,所以将 processData 设置为 false 之后 url 后面会出现 [object object] ,这是 javascript 对象 toString() 过后的结果,也就是说我们的这个方法并不很适合 GET 方法,所以想给数据穿衣服的同学们还是乖乖的使用 POST 方法吧。

讲到这里,发送数据我们解决了,但是接受数据呢?如果接受的数据也是进行加密的话,我们还需要对数据进行解密(说到这里还是得脱衣服[捂脸]),我们继续翻阅 API ,于是我又看到了一个叫做 dataFilter 的东西,老规矩,先看官方解释:

dataFilter 类型:Function 给 Ajax 返回的原始数据的进行预处理的函数。提供 data 和 type 两个参数:data 是 Ajax 返回的原始数据,type 是调用 jQuery.ajax 时提供的 dataType 参数。函数返回的值将由 jQuery 进一步处理。

该函数很简单,就两个参数,arguments[0] 是 ajax 的原始响应数据,也就是 XHR.responseText ,arguments[1] 是 ajax 请求参数中的 dataType ,而这个函数返回的值也就是 success 回调函数中的 responseText,这下就非常好办了,我们先来测试下:

前端代码发送 ajax 请求,后台响应一句 "hello" ,然后我们在 dataFilter 里返回一句 "world"

前端代码:

后台代码(java):

后端输出:

前端输出:

看来一切正常,现在我们加密和解密的过程进行一条龙的处理:

前端:

后台:

后台输出:

前端输出:

至此已经大功告成了,让我们来总结下我们使用过的东西

第一个: ajaxSetup 这是设置全局的初始属性

然后是三个属性:

beforeSend:发送前执行的函数

processData:默认不序列化参数

dataFilter:对响应的数据进行过滤

然后,我们就可以给我们的数据穿上一层漂漂亮亮的衣服了。

标签: 用jQuery.ajaxSetup实现对请求和响应数据的过滤

本文链接地址:https://www.jiuchutong.com/biancheng/373955.html 转载请保留说明!

上一篇:CSS+jQuery实现简单的折叠菜单(jquery的css方法)

下一篇:jquery+html仿翻页相册功能(html5翻页效果)

  • 税务机关地区编号查询
  • 农产品进项税额转出怎么算
  • 资产负债表税务报表中其他应收款可以为负数吗
  • 印花税是根据什么征收的
  • 事业单位的会计制度是什么
  • 会计准则体系包括会计制度吗
  • 行政单位拨给下属单位经费会计分录
  • 可供出售金融资产新准则叫什么
  • 企业采购材料没有发票是要交企业所得税吗
  • 分期付款方式购物划算吗
  • 个人出租房屋应该注意什么
  • 基本医疗保险是什么?
  • 发票一定要房东开的才能报销吗?
  • 增值税专用发票验证真伪
  • 政府回收土地要交土地增值税吗
  • 资产减值损失如何结转本年利润
  • 公允价值上升是收益还是损失
  • 高新企业最新政策2020
  • 跨境电商小规模与一般纳税人
  • 脚手架属于什么费用
  • 出售提完折旧的固定资产怎么记账
  • 一个完整的php文件由哪些元素组成
  • mac 10.11系统
  • PHP:pg_close()的用法_PostgreSQL函数
  • 工程项目科目如何设置
  • 广告费发票内容是什么
  • 购买股票会计分录怎么写
  • 小规模纳税人增值税免税政策
  • npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolve dependency
  • 处置资产的账务处理
  • 递延所得税资产和所得税费用的关系
  • 深度学习大模型框架的简单介绍(ChatGPT背后原理的基本介绍)
  • gpt指标
  • 增值税进项税抵扣凭证
  • 汇算清缴补税的情况有哪些
  • python tkinter详解
  • 织梦如何给栏目增加缩略图
  • 应收账款减值损失计入
  • 业务招待费进项转出报表怎么填
  • 小规模纳税人当月应交增值税怎么算
  • wordpress文章发布不显示作者
  • css文件代码示例
  • 本月进项税额可以下月抵扣吗
  • 技术服务收入属于什么收入
  • 发票已经做账但要退款账不平咋办
  • 土地使用权使用寿命不确定要摊销吗
  • 个人所得税计提会计分录怎么做
  • 成本核算分摊方法总结
  • 公司的零星开支怎么做账
  • 发票申请退税隔两个月能去办理么
  • 开具信用证的费用能开专票吗
  • 其他综合收益核算的内容及会计处理
  • 转账手续费没有发票能税前扣除吗
  • 原材料转固定资产账务处理
  • 公司办公室装修装修
  • 稳岗返还计入营业外收入
  • 施工企业的具体工作有哪些
  • 企业内部银行转账怎么记账
  • 会计档案销毁方案怎么写
  • 新注册的公司怎么申报个税
  • 年初未分配利润在利润表怎么填
  • mysql 5.6.26 winx64安装配置图文教程(一)
  • mysql解压版安装教程5.7.20
  • windows mysql1045
  • mysql 序列化转数组
  • 猎豹如何添加兼容性站点
  • windows xp怎么清理c盘
  • 把mac屏幕切换到桌面desktop
  • win单击变双击
  • msstat.exe - msstat是什么进程 有什么用
  • javascript怎么弄
  • Linux修改tomcat默认端口号8080
  • 备份多个数据库
  • shell脚本编程实例
  • 使用jquery实现的项目
  • javascript数组的本质
  • jquery中each()方法的作用及使用
  • 安卓快速开发平台
  • 国家税务总局12366上海(国际)纳税服务中心
  • 卷烟批发环节的消费税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设