视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
二次封装jqueryajax如何实现
2020-11-27 19:57:23 责编:小采
文档


这次给大家带来二次封装jquery ajax如何实现,实现二次封装jquery ajax的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

Ajax 的全称是Asynchronous JavaScript and XML 异步的javaScript和XML

AJax所涉及到得技术:

1.使用CSS和XHTML来表示。

2. 使用DOM模型来交互和动态显示。

3.使用XMLHttpRequest来和服务器进行异步通信。(核心)

4.使用javascript来绑定和调用。

在我们前端处理数据的时候免不了要 ajax 与后台通信, ajax 是通过 XMLHttpRequest 对象与服务器进行通信的, jquery 在 XMLHttpReaquest 的基础上封装了 $.ajax 办法进行通信, $.ajax 办法实用性非常强,又非常简单易用。 本次二次封装 query ajax,参考 express 可以添加中间件处理数据,返回 Promise(Defferd) 对象,减少回调, 写 ajax 更加简洁、优雅。

$.ajax({
 url: url,
 data: data,
 dataType: 'json',
 type: 'get',
 success: new Function(){},
 error: new Function(){},
 .......
})

大部分的时候我们只需要传入 url 和 data, 就可以获取到我们想到的数据了。

痛点

但是在项目中使用 $.ajax, 它还是有一些痛点的

就是现在基本所有项目的 ajax 返回的数据也是进行了二次封装,加入了后台在处理业务逻辑时的信息。

从返回 data, 变成 了 {code: 200, data:{}, err_msg:''}

如果每一个 ajax 请求回来都要判断 code 是否正确再进行业务逻辑处理或者报错提醒, 整个项目下来也太冗余了,

$.ajax({
 url: url,
 data: data,
 success: function(data){
 if(data.code == 200) {
 dosomething()
 } else {
 alert(data.err_msg);
 }
 }
})

为了解决这个问题,我们用一个函数再次封装 $.ajax, 把这种正确与否判断再处理业务逻辑或者报错提醒提取出来做成公共的部分。

util.ajax = function(obj, successFn){
 $.ajax({
 url: obj.url || '/interface',
 data: obj.data || {},
 dataType: obj.dataType || 'json',
 type: obj.type || 'get',
 success: function(data){
 if (data.code != 200) {
 alert(data.err_msg);
 } else {
 successFn(data.data)
 }
 },
 error: function(err){
 alert(err)
 }
 })
}

promise

util.ajax 代替 $.ajax 使用就可以减少了业务错误的判断啦。 我们再来完善下, 不使用回调的方式,使用 promise 的方式调用, 减少回调,让代码更清晰。

util.ajax = function(obj) {
 var deferred = $.Deferred();
 $.ajax({
 url: obj.url || '/interface',
 data: obj.data || {},
 dataType: obj.dataType || 'json',
 type: obj.type || 'get',
 }).success(function (data) {
 if (data.code != 200) {
 deferred.reject(data.err_msg);
 } else {
 deferred.resolve(data.data)
 }
 }).error(function (err) {
 deferred.reject('接口出错,请重试');
 })
 return deferred.fail(function (err) {
 alert(err)
 });
}
// 调用
var obj = {
 url: '/interface',
 data: {
 interface_name: 'name',
 interface_params: JSON.stringify({})
 }
};
util.ajax(obj)
 .done(function(data){
 dosomething(data)
 })

中间件

这是一个公共的办法,但是有时候我们需要处理差异化啊, 我们参考 express 引入一个中间件来解决差异化问题。

util.ajax = function(obj, middleware) {
 var deferred = $.Deferred();
 $.ajax({
 url: obj.url || '/interface',
 data: obj.data || {},
 dataType: obj.dataType || 'json',
 type: obj.type || 'get',
 }).success(function (data) {
 if (data.code != 200) {
 deferred.reject(data.err_msg);
 } else {
 deferred.resolve(data.data)
 }
 }).error(function (err) {
 deferred.reject('接口出错,请重试');
 })
 // 添加中间件
 if(!middleware) {
 middleware = function(){};
 }
 return deferred.done(middleware).fail(function (err) {
 message({
 content: err,
 type: 'error',
 showLeftIcon: true,
 duration: 5000
 });
 });
}
// 调用
// 调用
var obj = {
 url: '/interface',
 data: {
 interface_name: 'name',
 interface_params: JSON.stringify({})
 }
};
var middleware = function(data) {
 data.forEach(function(item){
 item.fullName = item.firstName + item.lastName
 })
}
util.ajax(obj, middleware)
 .done(function(data){
 console.log(data.fullName)
 })

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

Ajax方法实现Form表单提交的方法

jQuery怎么验证Ajax提交表单传参

下载本文
显示全文
专题