基于jQuery的ajax方法封装


Posted in Javascript onJuly 14, 2016

ajax (ajax开发)简介

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

在实际的项目里,ajax的应用频率很高,所以尽管jquery或者其他的一些类似的js库做了非常不错的封装,仍然有进一步封装简化的空间和必要

举一个例子,很久很久以前,我的ajax是这么写的:

$.ajax({
url: 'www.baidu.com/getInfo',
type: 'POST',
data: {
name: 'jack',
age: 18
},
dataType: 'json',
success: function(resp){
// callback
},
error: function(err){
// error code
} 
});

乍一看挺好没啥问题,但是其实success回调里的逻辑可能很复杂,甚至可能会出现ajax回调里再放一个ajax的情况,那这种写法就很糟糕了,全都杂糅在一起

可以进行一个简单的封装,这在之前Deferred对象的随笔里已经有提到

function ajax(url, param, type) {
// 利用了jquery延迟对象回调的方式对ajax封装,使用done(),fail(),always()等方法进行链式回调操作
// 如果需要的参数更多,比如有跨域dataType需要设置为'jsonp'等等,可以考虑参数设置为对象
return $.ajax({
url: url,
data: param || {},
type: type || 'GET'
});
}
// 链式回调
ajax('www.baidu.com/getInfo').done(function(resp) {
// 成功回调
}).fail(function(err) {
// 失败回调
});

但是虽然做到这一步了,问题还是会来,比如我司,成功的回调里还有一层逻辑判断,像这样:

// 我司ajax返回的json数据格式
// 当result为false时,msg中往往有错误信息
{
result: true,
data: {
name: 'jack'
},
msg: null
}
ajax('www.baidu.com/getInfo').done(function(resp) {
// 成功回调
if(resp.result){
// 当resp中result为true时的操作
// 往往这个时候要操作处理resp中的data对象信息
}
else{
// 当result为false时的操作,这时往往会根据resp中的另一属性msg来判断具体处理
}
}).fail(function(err) {
// 失败回调
});

问题有二:

第一,我每个ajax中都需要写一个同样的相对固定的逻辑判断(每个公司或者项目组可能会有不同,但是就项目本身而言,或者放大了到公司来说必然是固定的),我觉得很烦。

第二,如果我只想专注处理数据,比如在成功回调里,我直接拿到要处理要渲染的数据,在失败的回调里我直接拿到错误的代码,有没有这样的可能做进一步的封装。

其实这俩问题是一个,总结一句话,就是不想写那么多if,else。有一句话我觉得说得很好,逻辑是守恒的,但如果是可预见的逻辑,是有精简的可能的,我们这种显然属于可预见的逻辑。

二次封装利用了延迟对象的then方法,具体看代码:

function handleAjax(url, param, type) {
return ajax(url, param, type).then(function(resp){
// 成功回调
if(resp.result){
return resp.data; // 直接返回要处理的数据,作为默认参数传入之后done()方法的回调
}
else{
return $.Deferred().reject(resp.msg); // 返回一个失败状态的deferred对象,把错误代码作为默认参数传入之后fail()方法的回调
}
}, function(err){
// 失败回调
console.log(err.status); // 打印状态码
});
}
handleAjax('www.baidu.com/getInfo').done(function(resp){
// 当result为true的回调
}).fail(function(err){
// 当result为false的回调
});

这就把之前很杂揉的代码进一步的的简化,也方便了维护,比如某一天跟你说result不再是布尔值了,直接改成状态码这样的东西了,如果按以前一个ajax写一个判断,简直要疯。

以上所述是小编给大家介绍的基于jQuery的ajax方法封装,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
Aug 13 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
Jan 04 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
vue的mixins属性详解
Mar 14 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 Javascript
由浅入深剖析Angular表单验证
Jul 14 #Javascript
jQuery 3.0十大新特性最终版发布
Jul 14 #Javascript
js css+html实现简单的日历
Jul 14 #Javascript
javascript运算符——位运算符全面介绍
Jul 14 #Javascript
Angular.js 实现数字转换汉字实例代码
Jul 14 #Javascript
JavaScript——DOM操作——Window.document对象详解
Jul 14 #Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 #Javascript
You might like
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
最新28个很棒的jQuery 教程
2011/05/28 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
Vue组件tree实现树形菜单
2017/04/13 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
js实现双色球效果
2020/08/02 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
python实战教程之自动扫雷
2018/07/13 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
客户代表自我评价范例
2013/09/24 职场文书
师范院校学生自荐信范文
2013/12/27 职场文书
会计人员岗位职责
2014/03/19 职场文书
导师推荐信范文
2014/05/09 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
初中作文评语
2014/12/25 职场文书
安全生产学习心得体会
2016/01/18 职场文书
Linux中各个目录的作用与内容
2022/06/28 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers