uniapp 发起网络请求
推荐下我写的uni-http
- 创建
http-config.js 
import Vue from 'vue'
const BASE_URL = 'http://xxx.com';
if (process.env.NODE_ENV === 'development') {
  // #ifdef H5
  Vue.prototype.apiUrl = '';
  // #endif
  // #ifndef H5
  Vue.prototype.apiUrl = BASE_URL;
  // #endif
} else {
  Vue.prototype.apiUrl = BASE_URL;
}
function setDefaultObj(options) {
  // default show loading icon
  if (options.loading === undefined) {
    options.loading = true;
  }
  // default method is get
  if (!options.method) options.method = 'GET'
  // send formdata 发送文件不能写
  if (options.formData && !options.datafilePath) {
    options.header = {
      ...options.header,
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }
  // deault data
  if (!options.data) options.data = {}
  // token data
  if (!options.data.token) {
    // options.data.token = uni.getStorageSync('token') || '';
  }
  // params
  if (options.params && Object.prototype.toString.call(options.params) === '[object Object]') {
    const paramsString = _jsonToSerialize(options.params);
    const s = options.url.indexOf('?') <= 0 ? '?' : '&';
    options.url += s + paramsString;
  }
}
Vue.prototype.request = function(options) {
  let _res, _rej;
  let _promise = new Promise((res, rej) => {
    _res = res;
    _rej = rej;
  });
  setDefaultObj(options);
  if (options.loading) {
    uni.showLoading({
      title: '加载中'
    });
  }
  let url = options.url;
  if (!options.url.match(/^https?:\/\//)) {
    url = _join(this.apiUrl, options.url);
  }
  if (options.filePath) {
    // 传文件
    // https://www.kancloud.cn/guobaoguo/uni-app/821793
    const uploadTask = uni.uploadFile({
      url: url,
      filePath: options.filePath,
      name: options.name,
      formData: options.data,
      header: options.header,
      success: res => {
        if (options.loading) uni.hideLoading();
        const data = JSON.parse(res.data);
        if (typeof options.success == "function")
          options.success(data);
        _res(data);
      },
      fail: res => {
        if (options.loading) uni.hideLoading();
        const data = { ...res,
          data: JSON.parse(res.data)
        };
        if (typeof options.fail == "function") options.fail(data);
        _rej(data);
      }
    });
  } else {
    uni.request({
      url: url,
      data: options.data,
      method: options.method,
      header: options.header,
      success: res => {
        if (options.loading) uni.hideLoading();
        if (typeof options.success == "function") options.success(res.data);
        _res(res.data);
      },
      fail: res => {
        if (options.loading) uni.hideLoading();
        if (typeof options.fail == "function") options.fail(res);
        _rej(res)
      }
    });
  }
  return _promise;
}
Vue.prototype.postHttp = function(options) {
  return this.request({
    ...options,
    method: 'POST',
    formData: options.formData === false || options.filePath ? false : true,
  });
}
function _join(a_url, b_url) {
  return a_url.replace(/\/+$/, "") + "/" + b_url.replace(/^\/+/, "")
}
function _jsonToSerialize(o) {
  let s = '';
  for (let k in o) {
    let v = o[k];
    let vTag = Object.prototype.toString.call(v);
    if (vTag === '[object Array]') {
      for (let i of v) {
        s += `${k}=${encodeURIComponent(i)}&`
      }
    } else if (vTag === '[object Object]') {
      s += `${k}=${encodeURIComponent(JSON.stringify(v))}&`
    } else {
      s += `${k}=${encodeURIComponent(v)}&`
    }
  }
  return s.replace(/&$/, '');
}
export default {
  BASE_URL: BASE_URL,
  apiUrl: Vue.prototype.apiUrl,
  request: Vue.prototype.request.bind(Vue.prototype),
  postHttp: Vue.prototype.postHttp.bind(Vue.prototype),
}
- 在
main.js中导入 
import './http-config';
manifest.json配置代理
{
  ...
  "h5": {
    "router": {
      "mode": "hash"
    },
    "devServer": {
      "https": false,
      "proxy": {
        "/api": {
          "target": "http://xxx.com",
          "changeOrigin": true,
          "secure": false,
          "pathRewrite": {
            "^/api": "/"
          }
        }
      }
    }
  }
}
- 使用
 
    // http://xxx.com/getvideo
    this.request({
      url: '/getvideo',
      success: res => {
        // ...
      }
    });
也可以看看:
uniapp 发起网络请求的更多相关文章
- uni-app之网络请求
		
uni-app之网络请求 一,介绍 uni.request(OBJECT),发起网络请求,以下主要是一些特殊的参数说明,详细的可查看uni-app官网. 1,method的有效值必须是大写,默认GET ...
 - android4.0 HttpClient 以后不能在主线程发起网络请求
		
android4.0以后不能在主线程发起网络请求,该异步网络请求. new Thread(new Runnable() { @Override public void run() { // TODO ...
 - iOS swift HandyJSON组合Alamofire发起网络请求并转换成模型
		
在swift开发中,发起网络请求大部分开发者应该都是使用Alamofire发起的网络请求,至于请求完成后JSON解析这一块有很多解决方案,我们今天这里使用HandyJSON来解析请求返回的数据并转化成 ...
 - 使用axios优雅的发起网络请求
		
原文链接:https://www.jianshu.com/p/73585303fdc0 公司项目使用了vue作为技术栈,便理所应当地使用了官方推荐的axios进行网络请求,这里记录下axios的封装方 ...
 - 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求
		
摘自:http://kczxsp.hnu.edu.cn/upload/20150504165623705.pdf 里面对于木马的实验过程写得非常清楚,值得一看. 木马是隐藏在正常程序中的具有特殊功 ...
 - 小程序uni-app发起网络异步请求
		
// uni.request({ // url: 'api/boxs/search', // // 使用监听函数防止this指向改变 // success: res => { // // 判断是 ...
 - vue 如何发起网络请求 之 axios
		
1 1 2 3 4 5 6 7 8 9 10 // axios 请求 在main.js里边写入 import Axios from 'axios' // 配置请求信息 var $http = ...
 - thinkphp发起网络请求
		
常规做法使用CURL方法: private function http_request($url,$data = null,$headers=array()){ $curl = curl_init() ...
 - uni-app 网络请求
		
uni.request发起网络请求 url 开发者服务器接口地址 data 请求的参数 header method dataType responseType 设置响应的数据类型 statusCode ...
 
随机推荐
- LOJ10132
			
在 Adera 的异时空中有一张地图.这张地图上有 N 个点,有 N-1 条双向边把它们连通起来.起初地图上没有任何异象石,在接下来的 M 个时刻中,每个时刻会发生以下三种类型的事件之一: 地图的某个 ...
 - 统一资源定位符   (URL)
			
统一资源标识符(uniform/universal resource identifier,URI)用于表示Internet中的资源(通常是文档).URI 主要用于两种目的,其一是命名资源,尽管此时把 ...
 - owncloud搭建
			
使用OwnCloud建立属于自己私有的云存储网盘 OwnCloud概述: OwnCloud 一款文件主机服务软件,就是我们平时使用的云存储,不过这是在自己主机的服务器上建立属于自己的私有云,OwnCl ...
 - 27.SELinux 安全子系统
			
1.SELinux(Security-Enhanced Linux)是美国国家安全局在Linux 开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安 ...
 - ElasticSearch 介绍、Docker安装以及基本检索第三篇
			
一.简介 1.1 什么是Elasticsearch? Elasticsearch是一个分布式的开源搜索和分析引擎, 适用于所有类型的数据,包括文本.数字.地理空间.结构化和啡结构化数据.Elastic ...
 - Flink-v1.12官方网站翻译-P015-Glossary
			
术语表 Flink Application Cluster Flink应用集群是一个专用的Flink集群,它只执行一个Flink应用的Flink作业.Flink集群的寿命与Flink应用的寿命绑定. ...
 - Pytest(4)失败重跑插件pytest-rerunfailures
			
安装: pip3 install pytest-rerunfailures 重新运行所有失败用例 要重新运行所有测试失败的用例,请使用--reruns命令行选项,并指定要运行测试的最大次数: $ py ...
 - UWP(二)调用Win32程序
			
目录 一.如何构建Win32程序 二.如何构建UWP工程? 三.Samples 一.如何构建Win32程序 打开csproj文件,使用如下代码添加引用(Reference).注意,如果指定位置不存在, ...
 - 弹性伸缩 AS(Auto Scaling)
			
根据业务需求和策略设置伸缩规则,在业务需求增长时自动为您增加 ECS 实例以保证计算能力,在业务需求下降时自动减少 ECS 实例以节约成本,弹性伸缩不仅适合业务量不断波动的应用程序,同时也适合业务量稳 ...
 - KafkaConsumer 简析
			
使用方式 创建一个 KafkaConsumer 对象订阅主题并开始接收消息: Properties properties = new Properties(); properties.setPrope ...