ajax 请求方法

return: Promise

使用指南

全局使用 (推荐)
  1. //main.js
  2. import {req} from './common/request/request.js'; //文件路径请换成本地路径
  3. req.baseuUrl = 'https://www.easy-mock.com/mock/5ca6ec41215a7b66ff10343d/' //设置公共请求前面部分,全局生效
  4. //或者这样
  5. req.defaultReq.url='https://www.easy-mock.com/mock/5ca6ec41215a7b66ff10343d/' //只针对于请求接口
  6. req.defaultReq.baseData={ //设置公共参数,默认为空,设置此参数后每次发送请求都会带上此参数
  7. token:'000-000-000-000-player125'
  8. }
  9. req.defaultReq.beforeFinish=(res)=>{
  10. if(res.data.userOut){ //演示代码,需要退出,不做返回标记此次ajax作废
  11. uni.reLaunch({
  12. url: 'login?userOut=true'
  13. });
  14. }else{
  15. return res //返回最终response数据
  16. }
  17. }
  18. req.defaultReq.errorHandler=(err,next)=>{
  19. console.log(err)
  20. next(err);
  21. }
  22. req.defaultReq.type = "POST"; //这是默认请求为post
  23. Vue.prototype.$req = req; //挂载到原型上
局部使用
  1. import {req} from './common/request/request.js';
  2. const res = await req.ajax({
  3. path: "https://www.easy-mock.com/mock/5ca6ec41215a7b66ff10343d/example/query",
  4. })

代码演示

1.简单使用
  1. const res = await this.$req.ajax({
  2. path: "example/query", //可以是完整路径也可以后半部分
  3. })
  4. console.log(res);
2.带请求提示
  1. const res = await this.$req.ajax({
  2. path: "example/query",
  3. title: "正在加载", //false 则不显示
  4. })
  5. console.log(res);
3.带参数请求
  1. const res = await this.$req.ajax({
  2. path: "example/query",
  3. title: "正在加载",
  4. data:{
  5. name:'hhyang'
  6. }
  7. })
  8. console.log(res);
4.单个请求带拦截
  1. const res = await this.$req.ajax({
  2. path: "example/query",
  3. title: "正在加载",
  4. data:{
  5. name:'hhyang'
  6. },
  7. abortFun: (info,bt) => {
  8. bt.abort();
  9. },
  10. })
  11. console.log(res);
5.监听请求完成,无论失败还是成功。当然可以使用 then、catch、finally 详细
  1. const res = await this.$req.ajax({
  2. path: "example/query",
  3. title: "正在加载",
  4. data:{
  5. name:'hhyang'
  6. },
  7. finishFun:finsh => { //使用await 用此方法即可监听到
  8. console.log(finsh)
  9. }
  10. })
  11. console.log(res); //成功之后的返回,如要捕捉失败请使用try、catch
6.携带额外参数,不会上传。可提供给开发者分辨某个请求 详细
  1. const res = await this.$req.ajax({
  2. path: "example/query",
  3. title: "正在加载",
  4. data:{
  5. name:'hhyang'
  6. },
  7. },'我是额外参数1''我是额外参数2')
  8. console.log(res); //成功之后的返回,如要捕捉失败请使用try、catch
  9. //或者这样
  10. const res = await this.$req.ajax({
  11. path: "example/query",
  12. title: "正在加载",
  13. data:{
  14. name:'hhyang'
  15. },
  16. },{
  17. parmas1:'我是额外参数1',
  18. parmas2:'我是额外参数2',
  19. })
  20. console.log(res); //成功之后的返回,如要捕捉失败请使用try、catch
7.捕捉请求错误
  1. try{
  2. const res = await this.$req.ajax({
  3. path: "example/query",
  4. title: "正在加载",
  5. data:{
  6. name:'hhyang'
  7. },
  8. abortFun: (info,bt) => {
  9. bt.abort();
  10. },
  11. })
  12. console.log(res);
  13. }catch(e){
  14. console.log(e) //请求发生了错误
  15. }
8.自定义 header、dataType、responseType、type
  1. const res = await this.$req.ajax({
  2. path:"example/query",
  3. type:"POST",
  4. header:{
  5. 'content-type': 'application/x-www-form-urlencoded'
  6. },
  7. dataType: 'json',
  8. responseType: 'text',
  9. })
  10. console.log(res);
9.设置全局请求前拦截
  1. //延迟函数
  2. let timeout=function(time=3000){
  3. return new Promise(resolve=>{
  4. setTimeout(()=>{
  5. resolve();
  6. },time)
  7. })
  8. }
  9. //同步写法
  10. req.defaultReq.beforeSend=res=>{
  11. if(res.data.token!=''){ //验证token存在的情况下才放行
  12. return res
  13. }
  14. }
  15. //同步写法
  16. req.defaultReq.beforeSend=res=>{
  17. delete res.data; //删除传递的参数选项
  18. return res; //返回新的请求参数
  19. }
  20. //异步写法
  21. req.defaultReq.beforeSend=async res=>{
  22. await timeout(); //3秒后执行删除,再返回
  23. delete res.data; //删除传递的参数选项
  24. return res; //返回新的请求参数
  25. }
10.设置全局响应后拦截
  1. //延迟函数
  2. let timeout=function(time=3000){
  3. return new Promise(resolve=>{
  4. setTimeout(()=>{
  5. resolve();
  6. },time)
  7. })
  8. }
  9. //同步写法
  10. req.defaultReq.beforeFinish=res=>{
  11. if(res.data.userOut){ //退出登录不返回数据,标记此次请求无效
  12. uni.reLaunch({
  13. url: 'login?userOut=true'
  14. });
  15. }else{
  16. return res;
  17. }
  18. }
  19. //同步写法
  20. req.defaultReq.beforeFinish=res=>{
  21. return {msg:'这是我自定义的数据'}; //返回新的响应数据
  22. }
  23. //异步写法
  24. req.defaultReq.beforeFinish=async res=>{
  25. await timeout(); //3秒后执行
  26. return {msg:'这是我自定义的数据'}; //返回新的响应数据
  27. }
11.设置全局错误拦截
  1. //每次ajax错误请求都会走这个方法 你可以选择调用next 来抛出错误
  2. df.defaultReq.errorHandler=(err,next)=>{
  3. if(err.status==10002){
  4. console.log('请求前抛出的错误哦')
  5. }
  6. console.log(err)
  7. next(err); //抛出错误
  8. }
  9. //更多错误码请查阅下方

全局 Options

属性名类型默认值描述
baseuUrlString请求路径,开发者可以把公共的部分定义在这里
isUpOpenDownBooleanfalse是否在上传 js 中引入下载的 js,支持动态修改

baseuUrl 修改时会生效:上传,下载接口的公共部分。


全局 defaultReq

属性名类型默认值描述兼容
isreqBooleantrue是否开启 ajax 请求方法,默认是开启,如果该为 false,请求则不会调用并返回一个 reject
urlString用于修改请求接口地址,赋值此值会覆盖通过baseuUrl 赋值的值
headerObject{'content-type': 'application/x-www-form-urlencoded'}用于设置请求类型
baseDataObject设置基础参数,也就是说请求每次请求都会带上这个参数
typeStringGET请求方式,默认 GET。设置次参数时全部使用大写
dataTypeStringjson返回数据类型,默认为 json。会对返回数据做一个 JSON.parse
responseTypeStringtext设置响应的数据类型。合法值:text、arraybuffer支付宝小程序不支持
beforeSendFunctionajax 在发送前执行,等待改方法执行完成并传入请求的一系列参数,支持同步异步写法。必须返回传入的请求参数,供 if 判断语句块执行,false 情况下抛出 ajax 错误,终止此次请求。相反之
beforeFinishFunction开发者自定义代码块容器,此方法回调一个 response 对象,即 ajax 返回数据。开发者可以在此方法内做一系列逻辑判断。比如退出,等其他操作,支持同步异步写法。该方法必须返回一个数据,供 if 判断语句块执行,false 情况下抛出 ajax 错误,相反之
errorHandlerFunction开发者可以在此方法下捕捉ajax请求抛出的所有错误。会传入相对应的错误和 next 管道函数,调用 next() 才会真正的抛出错误 查阅错误码

全局 defaultReq 设置完成后针对全局有效,ajax 方法默认在你没传值的情况下优先采用的全局参数。可以通过向 ajax 方法传递参数覆盖全局的详细


ajax 参数

属性名类型描述兼容
pathString请求路径,可以是整个路径(设置了全局 url 则无效),也可以是相同路径后拆分出来的后半部分
titleBoolean/String是否显示请求提示 默认为 false 不显示, 传入字符串则显示 推荐 7 个字内
headerObject/String传入 Object 则为自定义整个 header。String 则只修改'content-type',默认取全局配置中的 header
dataObject/String/ArrayBuffer请求上传的参数,默认会加上全局配置中的 baseData
typeString请求方式。设置次参数时全部使用大写,默认使用全局配置中的
dataTypeString返回数据类型,默认为 json。会对返回数据做一个 JSON.parse,默认使用全局配置中的
responseTypeString设置响应的数据类型。合法值:text、arraybuffer支付宝小程序不支持
abortFunFunction第一个参数返回请求信息,第二个返回 requestTask 对象,通过 requestTask,可中断请求任务。
finishFunFunction第一个参数返回请求信息,无论请求失败还是成功都会走此方法

[…ages]
Object/String/Array/Number不做任何处理,ajax 完成后返回个你,可以通过此标记一个请求

ajax 错误码

错误码描述
10001请求开关处于关闭状态 状态 isreq:false
10002beforeSend 抛出错误
10003beforeFinish 抛出错误
10004真正的请求抛出错误 http状态码可以在err下查看