jQuery-实现简单的Ajax请求封装
封装的意义在于复用,在于减少重复的代码。
我在项目中做了简单的Ajax请求封装,实现方式如下:
//封装Ajax请求
$.extend({
ajaxDirect:function(url,type,data,success,error){
if(type.toLowerCase()=='post'){
data = pack(data)
}
$.ajax({
type: type,
url: base + url,
contentType:'application/json',
data:data,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("X-Token", sessionStorage.token)
},
success: function(data){
success(data)
},
error: function(data){
error(data)
},
dataType: "json"
})
}
})
其中的要点为:
1.使用jQ的$.extend函数,则调用时只需用$.ajaxDirect(url,type,data,function(){},function(){})即可,若data无值,则传空对象过来。
2.pack为JSON.stringify的封装,即
//对象序列化
function pack(data) {
return JSON.stringify(data)
} function unpack(data) {
return JSON.parse(data)
}
3.该项目在请求时需要传token,则我在请求时在请求头部统一加上了token,即
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("X-Token", sessionStorage.token)
}
4.base为请求的统一前缀,为公共变量,可自定义值。
调用示例:
GET请求
$.ajaxDirect("/user/info",'GET',{},
function (data) {
//发送成功
},
function (data) {
//发送失败
}
)
POST请求
1 var data = {
2 password:$('.newPwd').val()
3 }
4
5 $.ajaxDirect("/farmer/farmeruser/changePassword",'POST',data,
6 function(data){
7 //发送成功
8 },
9 function(data){
10 //发送失败
11 }
12 )
在这个基础上,我们可以进一步完善封装的Ajax。
//封装Ajax请求
$.extend({
ajaxDirect:function(url,type,data,success,error,requestType){
if(requestType!=='pic'&&type.toLowerCase()=='post'){
data = pack(data)
}
var request = {
type: type,
url: base + url,
contentType:'application/json',
data:data,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("X-Token", sessionStorage.token)
},
success: function(data){
//token过期
if(data.message==="token过期"){
$.ajax(
{
type: 'POST',
url: base+'/refleshToken',
contentType:'application/json',
data:pack({
token:sessionStorage.token
}),
success: function(data){
console.log(data)
sessionStorage.token = data.data.token
location.reload()
},
error: function(){
$.toast("发送失败", "text")
},
dataType: "json"
})
}else{
success(data)
}
},
error: function(data){
error(data)
},
dataType: "json"
}
if(requestType==='pic'){
request.cache = false
request.processData = false
request.contentType = false
} if(requestType==='login'){
request.beforeSend = false
}
$.ajax(request)
}
})
上面的代码相比第一段代码增加的功能有:
1.增加了POST的大小写适配
2.增加了token过期后统一请求新的token的接口
3.增加了参数requestType,可传可不传,用于区分请求的类型,从而设置请求头的参数。
jQuery-实现简单的Ajax请求封装的更多相关文章
- 利用JQUERY实现多个AJAX请求等待
利用JQUERY实现多个AJAX请求等待 li {list-style-type:decimal;}.wiz-editor-body ol.wiz-list-level2 > li {list- ...
- jQuery delegate方法实现Ajax请求绑定事件不丢失
给元素绑定click事件后 ,遇到一个问题:当执行一些ajax请求,再次调用此页面,里面的这个click事件就失效了 比如说:我的分页是一个ajax请求 但我点下一页时 后生成的元素a就没有了clic ...
- jQuery实现多个ajax请求等待
通常,jQuery的函数ajax进行Ajax调用.函数ajax只能做一个Ajax调用.当Ajax调用成功时,执行回调函数.可选地,当Ajax调用返回错误时,调用另一个回调函数.但是,该功能不能根据这些 ...
- 使用 jQuery Mockjax 插件模拟 Ajax 请求
在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这时候我有这么一个 Ajax 请求需要从后台获取数据: $.ajax({ url: '/products/' }).done(f ...
- MVC4 AspNet MVC下的Ajax / 使用JQuery做相关的Ajax请求
源码参考:链接:http://pan.baidu.com/s/1pKhHHMj 密码:mkr4 1:新建-->项目-->Web-->ASP.NET MVC 4 Web 应用程序.命 ...
- Python - Django - jQuery 实现简单的 AJAX
AJAX 局部刷新实例: 使用 jQuery 实现基本的发送 AJAX 请求 index.html: <!DOCTYPE html> <html lang="en" ...
- Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例
一.Ajax基本概念 [参考]:https://www.runoob.com/jquery/jquery-ajax-intro.html 异步的javascript.在不全部加载某一个页面部的情况下, ...
- <day001>存储到Mysql、mongoDB数据库+简单的Ajax请求+os模块+进程池+MD5
任务1:记住如何存储到Mysql.mongoDB数据库 ''' 存储到Mysql ''' import pymysql.cursors class QuotePipeline(object): def ...
- 封装一个简单的ajax请求
记录自己第一次封装ajax,肯定有很多考虑不周到,如有错误请指出,本人必将虚心改正. /** * * @param {Object} obj =>header:请求头:url:请求地址:meth ...
随机推荐
- Redis sorted set 常用命令介绍
Redis sorted set 使用: Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个 ...
- 【Git】本地分支
[Git]本地分支 转载:https://www.cnblogs.com/yangchongxing/p/10221382.html 目录 ============================== ...
- 【MyBatis】配置文件提示
[MyBatis]配置文件提示 官方帮助文档:http://www.mybatis.org/mybatis-3/zh/index.html config配置 http://mybatis.org/dt ...
- 70道阿里百度高频Java面试题(框架+JVM+多线程+算法+数据库)
基础与框架 1.String类能被继承吗,为什么 2.String,Stringbuffer,StringBuilder的区别? 3.ArrayList和LinkedList有什么区别 4.类的实例化 ...
- 百万级高并发mongodb集群性能数十倍提升优化实践
背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采 ...
- ASP.NET操作Excel
使用NPOI操作Excel,无需Office COM组件 部分代码来自于:https://docs.microsoft.com/zh-tw/previous-versions/ee818993(v=m ...
- C#程序编写高质量代码改善的157个建议【20-22】[泛型集合、选择集合、集合的安全]
建议20.使用泛型集合来替代非泛型集合 http://www.cnblogs.com/aehyok/p/3384637.html 这里有一篇文章,是我之前专门来介绍泛型的.我们应尽量的使用泛型集合.因 ...
- linux I/O重定向及管道
一,I/O重定向 重定向正常输出 > :覆盖以存在文件的内容,很危险的操作 >>:如果文件已经存在,则是在原内容的最后追加. 可以禁止>的覆盖行为,使用set -C.只在当前会 ...
- Linux 终端(TTY)
TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代.不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TT ...
- 解决JRebel对myBatis Mapper 失效的问题
解决JRebel对myBatis Mapper 失效的问题 在之前的文章中介绍了JRebel这个插件的使用和优势,虽然它对配置文件的改动的热更新是生效的,但是mybatis的mapper文件的改动却无 ...