当前位置:   article > 正文

基于jQuery的ajax的封装_jquery ajax封装

jquery ajax封装

在项目中,特别是没有用vue或是一些其他的大型前端框架时,发请求一般采用jQuery提供的ajax方法,请求很多时,就需要将ajax封装为一个公共方法用来减少代码冗余,这里使用promise对象来处理返回数据。

1、get请求的封装

其实几个请求的封装大同小异,get请求会详细作为例子详细描述。

  1. var baseUrl = "基地址"; //用于拼接之后请求的url
  2. //全局公共请求方法
  3. var funAjax = {
  4. get: (url, async, data, method = "get") => {
  5. return new Promise((resolve, reject) => {
  6. // 这里可以使用一些小的插件来显示正在请求
  7. // 加载中动画开启
  8. //设置默认异步请求
  9. /*此处同步请求: 同步请求(Synchronous Request):在发送请求时,JavaScript 引擎会等待请求完成并且收到响应,然后才会继续执行后续的代码。执行阶段会被阻塞,直到接收到请求的结果。这意味着,同步请求会阻塞后续的代码执行,直到请求完成,页面可能会出现“假死”状态。同步请求不适用于长时间的操作,因为它会冻结页面并阻塞用户的交互,异步请求则不用等待返回结果,根据情况设置参数
  10. */
  11. if (async == "" || async == null || typeof async == "undefined") {
  12. async = true;
  13. }
  14. $.ajax({
  15. url: baseUrl + url,
  16. type: method,
  17. async: async,
  18. dataType: "json",
  19. data: JSON.stringify(data),
  20. headers: {
  21. Token: localStorage.getItem("token"), //自定义请求头 此处我的token配置自动获取。根据自己配置位置进行获取
  22. "Content-Type": "application/json;charset=utf8",
  23. },
  24. success: function (ret) {
  25. // 加载中动画关闭
  26. // loading && loading.close();
  27. if (ret.code == 200) {
  28. resolve(ret);
  29. } else {
  30. if (ret.code == 401) {
  31. //给用户提示登录超时,您需要重新登录 并返回登录页面,清空请求头
  32. setTimeout(() => {
  33. localStorage.setItem("token", null);
  34. window.open("login.html");
  35. }, 1500);
  36. }
  37. reject(ret);
  38. }
  39. },
  40. error: function (err) {
  41. //console.log(JSON.stringify(err));
  42. // 加载中动画关闭
  43. // statusCode--->网络请求状态码,数字类型
  44. // code--->错误码,数字类型。(0:连接错误、1:超时、2:授权错误、3:数据类型错误、4:不安全的数据) 可以自己根据后端的返回数据来编写对应错误的提示
  45. if (err.statusCode == 1) {
  46. //提示用户请求超时,请稍后再试
  47. }
  48. reject(err);
  49. },
  50. });
  51. });
  52. },

  get方法的使用

  1. //发起get请求示例:
  2. funAjax.get(`url`true,'').then((res) => {
  3. //请求成功
  4. if (res.code == 200) {
  5. //状态码为200,处理返回的数据,返回的数据
  6. }
  7. }).catch((err) => {
  8. //错误处理 错误信息在err中
  9. });
2、post请求的封装
  1. post: (url, async, data, method = "post") => {
  2. return new Promise((resolve, reject) => {
  3. // 加载中动画开启
  4. //设置默认异步请求
  5. if (async == "" || async == null || typeof async == "undefined") {
  6. async = true;
  7. }
  8. $.ajax({
  9. url: baseUrl + url,
  10. type: method,
  11. async: async,
  12. dataType: "json",
  13. data: JSON.stringify(data),
  14. headers: {
  15. Token: localStorage.getItem("token"), //自定义请求头
  16. "Content-Type": "application/json;charset=utf8",
  17. },
  18. success: function (ret) {
  19. // 加载中动画关闭
  20. if (ret.code == 200) {
  21. resolve(ret);
  22. } else {
  23. if (ret.code == 401) {
  24. //登录超时,您需要重新登录
  25. setTimeout(() => {
  26. localStorage.setItem("token", null);
  27. window.open("login.html");
  28. }, 1500);
  29. }
  30. reject(ret);
  31. }
  32. },
  33. error: function (err) {
  34. //console.log(JSON.stringify(err));
  35. // 加载中动画关闭
  36. // statusCode--->网络请求状态码,数字类型
  37. // code--->错误码,数字类型。(0:连接错误、1:超时、2:授权错误、3:数据类型错误、4:不安全的数据)
  38. if (err.statusCode == 1) {
  39. //请求超时,请稍后再试
  40. }
  41. reject(err);
  42. },
  43. });
  44. });
  45. },

post的使用通get请求相同 

  1. //发起post请求示例:
  2. funAjax.post(`url`true,data).then((res) => {
  3. //请求成功
  4. if (res.code == 200) {
  5. //状态码为200,处理返回的数据,返回的数据
  6. }
  7. }).catch((err) => {
  8. //错误处理 错误信息在err中
  9. });
3、put请求的封装
  1. put: (url, async, data, method = "put") => {
  2. return new Promise((resolve, reject) => {
  3. // 加载中动画开启
  4. //设置默认异步请求
  5. if (async == "" || async == null || typeof async == "undefined") {
  6. async = true;
  7. }
  8. $.ajax({
  9. url: baseUrl + url,
  10. type: method,
  11. async: async,
  12. dataType: "json",
  13. data: JSON.stringify(data),
  14. headers: {
  15. Token: localStorage.getItem("token"), //自定义请求头
  16. "Content-Type": "application/json;charset=utf8",
  17. },
  18. success: function (ret) {
  19. // 加载中动画关闭
  20. // loading && loading.close();
  21. if (ret.code == 200) {
  22. resolve(ret);
  23. } else {
  24. if (ret.code == 401) {
  25. //登录超时,您需要重新登录
  26. setTimeout(() => {
  27. localStorage.setItem("token", null);
  28. window.open("login.html");
  29. }, 1500);
  30. }
  31. reject(ret);
  32. }
  33. },
  34. error: function (err) {
  35. //console.log(JSON.stringify(err));
  36. // 加载中动画关闭
  37. // statusCode--->网络请求状态码,数字类型
  38. // code--->错误码,数字类型。(0:连接错误、1:超时、2:授权错误、3:数据类型错误、4:不安全的数据)
  39. if (err.statusCode == 1) {
  40. // 请求超时,请稍后再试
  41. }
  42. reject(err);
  43. },
  44. });
  45. });
  46. },

put请求与post请求相同用法,此处不再做示例

4、delete请求的封装
  1. delete: (url, async, data, method = "delete") => {
  2. return new Promise((resolve, reject) => {
  3. // 加载中动画开启
  4. //设置默认异步请求
  5. if (async == "" || async == null || typeof async == "undefined") {
  6. async = true;
  7. }
  8. $.ajax({
  9. url: baseUrl + url,
  10. type: method,
  11. async: async,
  12. dataType: "json",
  13. data: JSON.stringify(data),
  14. headers: {
  15. Token: localStorage.getItem("token"), //自定义请求头
  16. "Content-Type": "application/json;charset=utf8",
  17. },
  18. success: function (ret) {
  19. // 加载中动画关闭
  20. // loading && loading.close();
  21. if (ret.code == 200) {
  22. resolve(ret);
  23. } else {
  24. if (ret.code == 401) {
  25. //登录超时,您需要重新登录。
  26. setTimeout(() => {
  27. localStorage.setItem("token", null);
  28. window.open("../../authentication-login.html");
  29. }, 1500);
  30. }
  31. reject(ret);
  32. }
  33. },
  34. error: function (err) {
  35. //console.log(JSON.stringify(err));
  36. // 加载中动画关闭
  37. // statusCode--->网络请求状态码,数字类型
  38. // code--->错误码,数字类型。(0:连接错误、1:超时、2:授权错误、3:数据类型错误、4:不安全的数据)
  39. if (err.statusCode == 1) {
  40. //请求超时,请稍后再试。
  41. }
  42. reject(err);
  43. },
  44. });
  45. });
  46. },
  47. };

delete请求示例也不再做过多赘述。

5、导出函数

      导出funAjax函数,之后在需要使用的页面引入所在的js文件,再使用funAjax.get()或其他使用请求即可。

window.funAjax = funAjax;

注:几个请求都是放在公共函数funAjax中,最后导出引入文件就可以使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/148046
推荐阅读
相关标签
  

闽ICP备14008679号