微信小程序进行网络通信,只能与指定域名进行通信。微信小程序包括四种类型的网络请求。普通HTTPS请求(wx.request)上传文件(wx.uploadFile)下载文件(wx.downloadFile)WebSocket通信(wx.connectSocket)这里主要介绍wx.request、wx.uploadFile、wx.dowloadFile三种网络请求。设置域名必须先设置域名,微信小程序才能与网络通信,否则会报错:URL域名无效,请在mp后台配置后再试。需要在微信公众平台的小程序中设置域名。在微信小程序的设置界面,可以看到设置选项:选择DevelopmentSettings:。可以看到服务器设置:这里可以设置四种网络访问类型对应的域名。每种类型的网络请求都需要设置一个域名。注意这里如果设置域名为https://example.com/api/,则无法调用https://example.com/api,必须跟在/后面。使用wx.request可以发起一个http请求,一个微信小程序被限制只能同时发起5个网络请求。functionqueryRequest(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)}})}上面的代码会发送一个httpget请求并打印出返回结果。参数也比较容易理解。url服务器数据的url地址请求的参数可以是Stringdata:"xxx=xxx&xxx=xxx"形式也可以是Objectdata:{"userId":1}header设置请求的headerrequestsuccessinterfacesuccesscallbackfailinterfacefailure回调中还有两个参数是代码中没有的:methodhttp方法,默认为GETrequestcomplete接口调用后回调,无论成功还是失败,接口都会调用上传文件。上传文件的api是wx.uploadFile,该api会发起一个httppost请求,Content-type是multipart/form-data。服务端需要根据content-type类型接收文件,示例代码:functionuploadFile(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请求一样。这里不同的参数是:name文件对应的key,服务端需要通过name参数获取文件formDatahttp请求,下载文件中可以使用的其他参数下载文件的api是wx.downloadFile,它会发起httpget请求,下载成功后返回文件的临时路径,示例代码:functiondownloadFile(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/videosuccess:下载成功后的回调,文件的临时目录与tempFilePath参数一起返回:res={tempFilePath:'filepath'}下载成功后为临时文件,只能在本次程序运行期间使用。如果需要持久化保存,需要调用wx.saveFile方法主动持久化文件。示例代码:functionsvaeFile(tempFile,success){wx.saveFile({tempFilePath:tempFile,success:function(res){varsvaedFile=res.savedFilePathif(success){success(svaeFile)}}})}使用wx.saveFile将临时文件保存到本地,并在需要时提供给小程序下次开始使用,其中参数为:tempFilePath待保存文件的路径success保存成功的回调返回保存成功的路径。使用res.savedFilePath获取保存成功的路径。开发:MINA中已经提到在app.js中设置networkTimeout可以设置四种网络访问的超时时间:"networkTimeout":{"request":10000,"connectSocket":10000,"uploadFile":10000,"downloadFile":10000}这里设置的超时时间对应四种网络请求
