封装的意义在于复用,在于减少重复的代码。

我在项目中做了简单的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请求封装的更多相关文章

  1. 利用JQUERY实现多个AJAX请求等待

    利用JQUERY实现多个AJAX请求等待 li {list-style-type:decimal;}.wiz-editor-body ol.wiz-list-level2 > li {list- ...

  2. jQuery delegate方法实现Ajax请求绑定事件不丢失

    给元素绑定click事件后 ,遇到一个问题:当执行一些ajax请求,再次调用此页面,里面的这个click事件就失效了 比如说:我的分页是一个ajax请求 但我点下一页时 后生成的元素a就没有了clic ...

  3. jQuery实现多个ajax请求等待

    通常,jQuery的函数ajax进行Ajax调用.函数ajax只能做一个Ajax调用.当Ajax调用成功时,执行回调函数.可选地,当Ajax调用返回错误时,调用另一个回调函数.但是,该功能不能根据这些 ...

  4. 使用 jQuery Mockjax 插件模拟 Ajax 请求

    在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这时候我有这么一个 Ajax 请求需要从后台获取数据: $.ajax({ url: '/products/' }).done(f ...

  5. MVC4 AspNet MVC下的Ajax / 使用JQuery做相关的Ajax请求

    源码参考:链接:http://pan.baidu.com/s/1pKhHHMj  密码:mkr4 1:新建-->项目-->Web-->ASP.NET MVC 4 Web 应用程序.命 ...

  6. Python - Django - jQuery 实现简单的 AJAX

    AJAX 局部刷新实例: 使用 jQuery 实现基本的发送 AJAX 请求 index.html: <!DOCTYPE html> <html lang="en" ...

  7. Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例

    一.Ajax基本概念 [参考]:https://www.runoob.com/jquery/jquery-ajax-intro.html 异步的javascript.在不全部加载某一个页面部的情况下, ...

  8. <day001>存储到Mysql、mongoDB数据库+简单的Ajax请求+os模块+进程池+MD5

    任务1:记住如何存储到Mysql.mongoDB数据库 ''' 存储到Mysql ''' import pymysql.cursors class QuotePipeline(object): def ...

  9. 封装一个简单的ajax请求

    记录自己第一次封装ajax,肯定有很多考虑不周到,如有错误请指出,本人必将虚心改正. /** * * @param {Object} obj =>header:请求头:url:请求地址:meth ...

随机推荐

  1. 面试百度、阿里、腾讯,这134道Java面试题你会多少?

    这里一共是134道Java面试题,看看你能对几道吧! 1. Java 语言有哪些特点 2. 面向对象和面向过程的区别 3. 关于 JVM JDK 和 JRE 最详细通俗的解答 4. Oracle JD ...

  2. Ubuntu修改时间

    Ubuntu修改时区和更新时间 先查看当前系统时间 date -R 结果时区是:+0000 我需要的是东八区,这儿显示不是,所以需要设置一个时区 运行 tzselect 在这里我们选择亚洲 Asia, ...

  3. Laravel 中使用 swoole 项目实战开发案例二 (后端主动分场景给界面推送消息)

    推荐阅读:Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)​ 需求分析 我们假设有一个需求,我在后端点击按钮 1,首页弹出 “后端触发了按钮 1”.后端点了 ...

  4. ansible部署nginx

    1.配置免密登录 [root@localhost ansible]# vim /etc/ansible/hosts //用来配置目标主机 加入以下内容 [nginx] //目标主机组 192.168. ...

  5. fastText训练word2vec并用于训练任务

    最近测试OpenNRE,没有GPU服务器,bert的跑不动,于是考虑用word2vec,捡起fasttext 下载安装 先clone代码 git clone https://github.com/fa ...

  6. IDEA中使用Maven模板创建Maven WebApp项目并使用Tomact来运行项目

    首先需要正确安装Maven和Tomact,Maven安装和Tomact安装步骤,参见别的文章. 一.创建Maven工作空间 点击Finish按钮后,耐心等待.直到出现BUILD SUCCESS为止. ...

  7. Csharp:jquery.ajax-combobox

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. Electron中使用sql.js操作SQLite数据库

    推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...

  9. JavaScript图形实例:四瓣花型图案

    设有坐标计算公式如下: X=L*(1+SIN(4α))*COS(α) Y=L*(1+SIN(4α))*SIN(α) 用循环依次取α值为0~2π,计算出X和Y,在canvas画布中对坐标位置(X,Y)描 ...

  10. PHP使用递归按层级查找数据

    今天主要介绍一下使用递归来按层级查找数据.原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能. ...