微信小程序 http请求详细介绍


Posted in Javascript onOctober 09, 2016

在微信小程序进行网络通信,只能和指定的域名进行通信,微信小程序包括四种类型的网络请求。

  1. 普通HTTPS请求(wx.request)
  2. 上传文件(wx.uploadFile)
  3. 下载文件(wx.downloadFile)
  4. WebSocket通信(wx.connectSocket)

这里以介绍wx.request,wx.uploadFile,wx.dowloadFile三种网络请求为主

设置域名

要微信小程序进行网络通信,必须先设置域名,不然会出现错误:

URL 域名不合法,请在 mp 后台配置后重试

需要在微信公众平台的小程序中设置域名。
在微信小程序的设置界面可以看到设置选项:

微信小程序 http请求详细介绍

设置

选择开发设置:

微信小程序 http请求详细介绍

开发设置

可以看到服务器设置:

微信小程序 http请求详细介绍

服务器设置

在这里可以设置对应四种网络访问的域名,每一种类型的网络请求需要设置一个域名,注意如果在这里设置域名为https://example.com/api/,那么https://example.com/api是无法调用的,必须加上后面/。

http请求

使用wx.request可以发起一个http请求,一个微信小程序被限制为同时只有5个网络请求。

function queryRequest(data){  
  wx.request({
    url:"https://example.com/api/",
    data:data,
    header:{
      // "Content-Type":"application/json"
    },
    success:function(res){
      console.log(res.data)
    },
    fail:function(err){
      console.log(err)
    }

  })

}

上面的代码会发送一个http get请求,然后打印出返回的结果。其中的参数也比较容易理解。

  1. url 服务器的url地址
  2. data 请求的参数可以采用String data:"xxx=xxx&xxx=xxx"的形式或者Object data:{"userId":1}的形式
  3. header 设置请求的header
  4. success 接口成功的回调
  5. fail 接口失败的回调

另外还有两个参数没有在代码里:

method http的方法,默认为GET请求

complete 调用接口结束之后的回调,无论成功或者失败该接口都会被调用

上传文件

上传文件的api为wx.uploadFile,该api会发起一个http post请求,其中的Content-type为multipart/form-data。服务器端需要按照该Content-type类型接收文件,示例代码:

function uploadFile(file,data) {
  wx.uploadFile({
    url: 'http://example.com/upload',
    filePath: file,
    name: 'file',
    formData:data,
    success:function(res){
      console.log(res.data)
    },
    fail:function(err){
      console.log(err)
    }

  })

}

其中的url,header,success,fail以及complete和普通的http请求是一样的。(微信小程序应用号交流群 563752274)
这里有区别的参数是:

name文件对应的key,服务器端需要通过name参数获取文件

formData http请求中可以使用的其他参数

下载文件

下载文件的api为wx.downloadFile,该api会发起一个http get请求,并在下载成功之后返回文件的临时路径,示例代码:

function downloadFile(url,typ,success){
  wx.downloadFile({
    url:url,
    type:typ,
    success:function(res){
      if(success){
        success(res.tempFilePath)
      }
    },
    fail:function(err){
      console.log(err)
    }
  })
}

其中的url,header,fail,complete和wx.uploadFile的参数使用是一致的,其中有区别的参数是:

type:下载资源的类型,用于客户端自动识别,可以使用的参数image/audio/video

success:下载成功之后的回调,以tempFilePath的参数返回文件的临时目录:res={tempFilePath:'文件路径'}

下载成功后的是临时文件,只会在程序本次运行期间可以使用,如果需要持久的保存,需要调用方法wx.saveFile主动持久化文件,实例代码:

function svaeFile(tempFile,success){
 wx.saveFile({
   tempFilePath:tempFile,
   success:function(res){
     var svaedFile=res.savedFilePath
     if(success){
       success(svaeFile)
     }
   }
 })
}

使用wx.saveFile保存临时文件到本地,提供给小程序下次启动时使用,其中的参数:

  1. tempFilePath 需要被保存文件的路径
  2. success 保存成功的回调,返回保存成功的路径,使用res.savedFilePath可以获取保存成功的路径
  3. fail 失败的回调
  4. complete结束的回调

超时的设置

在微信小程序开发:MINA中已经提到了在app.js中设置networkTimeout可以设置四种类型网络访问的超时时间:

"networkTimeout":{
  "request": 10000,
  "connectSocket": 10000,
  "uploadFile": 10000,
  "downloadFile": 10000
}

这里设置的超时时间对应着四种类型的网络请求。

源代码请参考:https://github.com/jjz/weixin-mina/blob/master/api/api.js

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript this用法小结
Dec 19 Javascript
Javascript中innerHTML用法实例分析
Jan 12 Javascript
Javascript基础教程之数据类型转换
Jan 18 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
jQuery EasyUI 入门必看
Jun 03 Javascript
jQuery的层级查找方式分析
Jun 16 Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
js实现表格单列按字母排序
Aug 12 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 Javascript
微信小程序 Flex布局详解
Oct 09 #Javascript
JavaScript实现Java中Map容器的方法
Oct 09 #Javascript
JavaScript基于对象去除数组重复项的方法
Oct 09 #Javascript
JS中this上下文对象使用方式
Oct 09 #Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 #Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
Oct 09 #Javascript
BootStrap中Table分页插件使用详解
Oct 09 #Javascript
You might like
php抽奖小程序的实现代码
2013/06/18 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python三级目录展示的实现方法
2016/09/28 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
带你了解python装饰器
2017/06/15 Python
tornado 多进程模式解析
2018/01/15 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
Python循环结构的应用场景详解
2019/07/11 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
幼师求职自荐信
2014/05/31 职场文书
毕业生实习证明
2014/09/19 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
详解TypeScript中的类型保护
2021/04/29 Javascript
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers