在各种前端框架如React、VUE、Angular等层出不穷的今天,前端的开发效率大大提高,且前端在用原始技术开发时的许多问题在使用了框架后也不存在了,个人在使用了vue开发项目后,觉得这些框架真的太好了,真的给我们节省了很多的开发时间。话虽如此,但依然有很多的前端小伙伴在使用基于jquery的前端技术,也包括本人。

那么问题来了,前端在开发时势必会调后端的接口,就会用到ajax,就会在调接口时可能会有各种状态展示,于是,封装一个公共的ajax来实现产品的需求就显得很有必要。接下来我们就来实现对jquery的ajax进行二次封装。

/*
* type 请求的方式 默认为get
* url 发送请求的地址
* param 发送请求的参数
* isShowLoader 是否显示loader动画 默认为false
* dataType 返回JSON数据 默认为JSON格式数据
* callBack 请求的回调函数
*/
(function(){
function AjaxRequest(opts){
this.type = opts.type || "get";
this.url = opts.url;
this.param = opts.param || {};
this.isShowLoader = opts.isShowLoader || false;
this.dataType = opts.dataType || "json";
this.callBack = opts.callBack;
this.init();
} AjaxRequest.prototype = {
//初始化
init: function(){
this.sendRequest();
},
//渲染loader
showLoader: function(){
if(this.isShowLoader){
var loader = '<div class="ajaxLoader"><div class="loader">加载中...</div></div>';
$("body").append(loader);
}
},
//隐藏loader
hideLoader: function(){
if(this.isShowLoader){
$(".ajaxLoader").remove();
}
},
//发送请求
sendRequest: function(){
var self = this;
$.ajax({
type: this.type,
url: this.url,
data: this.param,
dataType: this.dataType,
beforeSend: this.showLoader(),
success: function(res){
self.hideLoader();
if (res != null && res != "") {
if(self.callBack){
if (Object.prototype.toString.call(self.callBack) === "[object Function]") { //Object.prototype.toString.call方法--精确判断对象的类型
self.callBack(res);
}else{
console.log("callBack is not a function");
}
}
}
}
});
}
}; window.AjaxRequest = AjaxRequest;
})();

页面调用:

<script>
new AjaxRequest({
type: "get",
url: "https://5ae979d7531a580014142797.mockapi.io/api/v1/records",
param: "",
isShowLoader: true,
dataType: "",
callBack: function(res){
console.log(res);
}
});
</script>

之前本篇博文所描述的对ajax的二次封装虽然也实现了同样的功能,但却加入了大量的判断,比如要判断某个参数是否传入,如果没有传入,就要给它一个默认值,这还是其次,麻烦的是如果这个参数没有传入,那么它就会被后续的参数所覆盖,由此就还要判断后续的参数的类型以防止参数用错等等,这不仅大大增加了代码量,还降低了性能,在提升页面性能需求的今天,至少我认为这是不可取的,而且我在网上搜了一把,发现基本所有对ajax的二次封装都是加入了对参数的各种判断。如下图:



图1



图2



图3

而且这种的封装方式本人私心想着可能是要求在调用这个方法的时候就必须每个参数都要传入,哪怕是传入了一个空字符串。如果不传,就会被后边的参数所覆盖。比如图1中的data如果没有传入,data就会被success参数所覆盖,此时data=success,那么在图2中success就会被当作ajax的data参数传给接口。其实呢,success是我们传入的一个函数参数,是要用作ajax的回调函数来触发的,不是当作ajax的参数传给接口的。(上边三张图是截自网络,没有恶意,如果需要,可以私信我删除)

于是,面向对象的封装方式我认为还是可以很好的解决以上的种种问题,也大大降低了封装的成本,提升了性能(至少这种方式不会出现由于前边的参数没有传入而被后边的参数所覆盖的问题)。

对jquery的ajax进行二次封装的更多相关文章

  1. 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache

    虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...

  2. Ajax的二次封装

    function handleAjax(url,_data,method) { return ajax(url,_data,method).then(function (res) { if(res){ ...

  3. jQuery与Ajax的应用——《锋利的jQuery》(第2版)读书笔记3

    第6章 jQuery与Ajax的应用 jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是load().$.get()和$.post()方法,第3层是$ ...

  4. jquery中ajax的用法

    Jquery中队Ajax操作进行了封装,可分为3层:1.最底层$.ajax(),2.第二层load().$.get().$.post()方法,3.第三层$.getScript()和$.getJSON( ...

  5. jQuery 与 Ajax 的应用

    Ajax 全称为 "Asynchronous JavaScript and XML"(异步 JavaScript 和 XML ),它并不是指一种单一的技术,而是有机地利用了一系列交 ...

  6. Ajax第二天——JQuery的Ajax

    JQuery中的Ajax  jQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法是 $.ajax(), 第二层是 load(), $.get() 和 $.post(), (常 ...

  7. 第6章 jQuery与Ajax的应用

    6.1 Ajax的优势和不足 6.1.1 Ajax的优势 1.不需要插件支持 2.优秀的用户体验 3.提高Web程序的性能 Ajax模式只是通过XMLHttpRequest对象向服务器端提交希望提交的 ...

  8. 6 《锋利的jQuery》Ajax的应用(略。)

    Ajax的优势 1.不需要插件支持 2.优秀的用户体验 3.提高web程序的性能(传输数据的方式,按需发送) 4.减轻服务器和带宽的负担 Ajax的不足 1.浏览器对XMLHttpRequest对象支 ...

  9. Ajax_使用 jQuery 实现Ajax

    [jQuery中的Ajax] 1.jQuery对Ajax操作进行了封装,在jQuery中最底层的方法时 $.ajax().第二层是 load() , $.get()  和 $.post(),第三层是 ...

随机推荐

  1. jquery实现 复选框 全选

    $("#checkAll").change(function () { $(this).closest("table") .find(":checkb ...

  2. SHLVL 和 BASH_SUBSHELL 两个变量的区别

    SHLVL 是记录多个 Bash 进程实例嵌套深度的累加器,而 BASH_SUBSHELL 是记录一个 Bash 进程实例中多个子 Shell(subshell)嵌套深度的累加器. 看不懂上面这句话不 ...

  3. [译]git的那些flag

    git add -p console有一个交互式的界面(如下图),让你一个一个文件的选择是add还是不add.注意这些文件必须是tracked过的, 也就是说如果你的新的文件从来没有add过,那么他不 ...

  4. HDU 5686 斐波那契数列、Java求大数

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686 当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1. 此时有两种情况:当不适用第n个1进 ...

  5. python基础三

    多级菜单 多级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 #!/usr/bin/env python # -*- coding: utf-8 -*- menu = { '北京':{ '海淀 ...

  6. jQuery UI 实现图片循环显示,常用于网站首页banner广告切换

    http://www.runoob.com/try/try.php?filename=jqueryui-example-position-cycler <!doctype html>< ...

  7. Func与Action

    平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后 ...

  8. JavaScript高级程序设计学习笔记--高级技巧

    惰性载入函数 因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中,看看下面来自上一章的createXHR()函数. function createXH ...

  9. .NET LINQ概述

    LINQ      语言集成查询 (LINQ) 是 Visual Studio 2008 中引入的一组功能,它在对象领域和数据领域之间架起了一座桥梁.可为 C# 和 Visual Basic 语言语法 ...

  10. PhpStorm Git 配置(解决文件没有变色的问题)

    摘要: PhpStorm Git 配置 首先需要安装windows下的Git版本,网上有很多我下载的是msysgit反正都差不多,不会的自己百度. 其次打开PhpStorm,点击File ,Setti ...