【从零开始搭建uniapp开发框架】(九)—— ajax网络请求封装

框架开源地址:https://gitee.com/yunhaotian/uniapp_mobileFrame

ajax网路请求封装了POST、GET、 PUT、DELETE四种接口请求方式

在 common 文件夹下新建 sju.ajax.js 文件

 

 

 

 

 

 

sju.ajax.js源码:

/**
 * ajax相关方法的封装
 */
import base from '@/common/sju.base.js';
import login from '@/common/sju.login.js'
import alert from '@/common/sju.alert.js'

//基准地址域名,这些地址域名按照自己需要添加
let app = ""
let api = ""
let web = ""
// 开发环境
if (process.env.NODE_ENV === 'development') {
    app = 'https://www.xxx.com/';//H5部署域名
    api = 'https://www.xxx.com/';//接口域名
    web = 'https://www.xxx.com/';//后台地址域名
}
// 生产环境(发布环境)
if (process.env.NODE_ENV === 'production') {
    app = 'https://www.xxx.com/';//H5部署域名
    api = 'https://www.xxxx.com/';//接口域名
    web = 'https://www.xxx.com/';//后台地址域名
}

let ajax = {
    // 对外公开的网址
    appUrl: app,
    apiUrl: api,
    adminUrl: web,
    
    /**
     * @description ajax Post请求,返回json数据
     * <br/>success回调方法的参数就是返回数据res的.data.data属性值
     * <br/>res.data.result为true时才执行success回调方法,为false是封装统一处理
     * @param {string} url 请求的地址
     * @param {object} data 请求参数
     * @param {function} success 成功后回调的方法
     * @param {function} fail 失败后回调的方法
     * @param {bool} showLoading 是否显示加载框(默认false)
     * @param {string} type 内容类型(默认application/x-www-form-urlencoded 表单默认的提交数据的格式))
     * /api/xxx/xxx
     */
    post: function(url, data, success, showLoading,type) {
        if (base.isNull(showLoading))
            showLoading = false;
        if (base.isNull(type))
            type = 'application/x-www-form-urlencoded';    //默认表单提交数据的格式

        base.logInfo("ajax post url:" + url);
        if (showLoading == true)
            alert.showLoading();
        console.info(ajax.apiUrl + url);
        uni.request({
            url: ajax.apiUrl + url,
            data: data,
            method: 'POST',
            timeout: 600000,//超时时间,单位 ms
            header: {
                'content-type':type,
                'token': login.getValue('token')
            },
            success: (res) => {
                console.info(res);
                if (res.statusCode == "200") {     //和后台接口协定请求成功返回的状态
                    console.info('------api请求返回数据:' + url);
                    success(res.data);             //接口请求成功后返回结果数据
                } else {
                    if(res.data.error!="")
                    {
                        alert.showError(res.data.error);    //接口请求出错,弹窗展示接口报错内容
                    }
                    else
                    {
                        alert.showError('系统繁忙,请稍后再试'); //接口不返回报错内容,展示
                    }
                }
            },
            fail: (res) => { //接口调用失败的回调
                console.info(res);
                alert.showError('系统繁忙,请稍后再试');
            },
            complete: (res) => { //接口调用结束的回调
                console.info('ajax complete');
                if (showLoading == true)
                    uni.hideLoading();
            }
        });
    },
    /**
     * @description  ajax get请求,返回数据格式不定
     * <br/>success回调方法的参数就是返回的原始数据
     * @param {string} url 请求的地址
     * @param {object} data 请求参数
     * @param {function} success 成功后回调的方法
     */
    get: function(url, data, success) {
        base.logInfo("ajax get url:" + url);
        alert.showLoading();
        uni.request({
            url: ajax.apiUrl + url,
            method: 'GET',
            timeout: 600000,
            header: {
                'token': login.getValue('token')
            },
            data: data,
            success: (res) => {
                if (res.statusCode == "200") {
                    console.info('------api请求返回数据:' + url);
                    success(res.data);
                } else {
                    if(res.data.error!="")
                    {
                        alert.showError(res.data.error);
                    }
                    else
                    {
                        alert.showError('系统繁忙,请稍后再试');
                    }
                }
            },
            fail: (res) => {
                console.info(res);
                alert.showError('网络请求出错');
            },
            complete: (res) => {
                alert.hideLoading();
            }
        });
    },
    /**
     * @description ajax PUT请求,返回json数据
     * @param {string} url 请求的地址
     * @param {object} data 请求参数
     * @param {function} success 成功后回调的方法
     * @param {function} fail 失败后回调的方法
     * @param {bool} showLoading 是否显示加载框(默认false)
     * /api/xxx/xxx
     */
    put: function(url, data, success, showLoading) {
        if (base.isNull(showLoading))
            showLoading = false;
    
        base.logInfo("ajax post url:" + url);
        if (showLoading == true)
            alert.showLoading();
        console.info(ajax.apiUrl + url);
        uni.request({
            url: ajax.apiUrl + url,
            data: data,
            method: 'PUT',
            timeout: 600000,
            header: {
                // 'content-type':'application/x-www-form-urlencoded',application/json
                'content-type':'application/json',
                'token': login.getValue('token')
            },
            success: (res) => {
                console.info(res);
                if (res.statusCode == "200") {
                    console.info('------api请求返回数据:' + url);
                    success(res.data);
                } else {
                    if(res.data.error!="")
                    {
                        alert.showError(res.data.error);
                    }
                    else
                    {
                        alert.showError('系统繁忙,请稍后再试');
                    }
                }
                // uni.hideLoading();
            },
            fail: (res) => {
                console.info(res);
                alert.showError('系统繁忙,请稍后再试');
            },
            complete: (res) => {
                console.info('ajax complete');
                if (showLoading == true)
                    uni.hideLoading();
            }
        });
    },
    
    /**
     * @description ajax DELETE请求,返回json数据
     * @param {string} url 请求的地址
     * @param {object} data 请求参数
     * @param {function} success 成功后回调的方法
     * @param {function} fail 失败后回调的方法
     * @param {bool} showLoading 是否显示加载框(默认false)
     * /api/xxx/xxx
     */
    delete: function(url, data, success, showLoading) {
        if (base.isNull(showLoading))
            showLoading = false;
    
        base.logInfo("ajax post url:" + url);
        if (showLoading == true)
            alert.showLoading();
        console.info(ajax.apiUrl + url);
        uni.request({
            url: ajax.apiUrl + url,
            data: data,
            method: 'DELETE',
            timeout: 600000,
            header: {
                // 'content-type':'application/x-www-form-urlencoded',application/json
                'content-type':'application/json',
                'token': login.getValue('token')
            },
            success: (res) => {
                console.info(res);
                if (res.statusCode == "200") {
                    console.info('------api请求返回数据:' + url);
                    success(res.data);
                } else {
                    if(res.data.error!="")
                    {
                        alert.showError(res.data.error);
                    }
                    else
                    {
                        alert.showError('系统繁忙,请稍后再试');
                    }
                }
                // uni.hideLoading();
            },
            fail: (res) => {
                console.info(res);
                alert.showError('系统繁忙,请稍后再试');
            },
            complete: (res) => {
                console.info('ajax complete');
                if (showLoading == true)
                    uni.hideLoading();
            }
        });
    },
    
}

export default ajax;

 

把封装的方法导入整个框架,在main.js写引入方法

 

import sjuAjax from './common/sju.ajax.js'

Vue.prototype.sjuAjax = sjuAjax;

 

 

页面调用方法示例:

this.sjuAjax.post('/api/xxx/xxx', {
	text: '数据',//请求参数
	test:'数据'
	}, data => {
		console.log(data)//请求接口成功返回结果
})

 

posted @ 2022-02-15 09:25  编程民工  阅读(636)  评论(1)    收藏  举报