请求服务器数据API
一、简介
用来请求服务器数据发起的是HTTPS请求,同时它需要在微信公众平台配置HTTPS服务器域名,一个月可申请三次修改,否则无法使用wx.request请求服务器数据。WebSocket会话,文件上传下载服务器域名都是如此。
二、wx.request(object)
《wx.request(object)参数说明》
字段 | 是否必填 | 数据类型 | 含义 |
---|---|---|---|
url | 是 | string | 开发者服务器接口地址。 |
data | 否 | 请求参数。 | |
header | 否 | 请求头。不能设置refer。content-type的默认值为“application/json” | |
method | 否 | 默认值为GET。有效值为GET、POST、DELETE、PUT、TRACE、CONNECT、OPTIONS。 | |
dataType | 否 | 默认JSON。如果设置了dataType为.json文件,则会尝试对响应数据组一次JSON.parse;设置其它值,则不对返回的内容进行JSON.parse。 | |
responseType | 否 | 响应的数据类型。text表示的响应数据为文本,arraybuffer表示响应的数据为ArrayBuffer。 | |
success | 否 | function | 调用成功的回调函数 |
fail | 否 | function | 调用失败的回调函数 |
complete | 否 | function | 调用结束的回调函数(成功、失败都会执行) |
三、HTTP域名的服务器配置
wx.request无法请求HTTP域名的服务器,访问服务器路径的时候,会到公众开发平台里找他我们配置的HTTP服务器域名,如果域名存在就让访问,否则不让访问。
服务器域名请在“小程序后台”-“开发”-“开发设置”-"服务器域名"中进行配置。配置时应注意以下几点:
- 域名只支持https(wx.request、wx.uploadFile、wx.downloadFile)和wss(wx.connectSocket)协议;
- 域名不能使用IP地址(小程序局域网IP除外)或localhost;
- 可以配置端口;
- 域名必须经过ICP备案;
- 出于安全考虑,api.weixin.qq.com不能被配置为服务器域名,相关API也不能在小程序中调用。开发者应将APPSeret保存到后台服务器中,通过服务器使用getAccessToken接口来获取access_token,并调用相关的API;
- 对于每个接口分别可以配置最多20个域名。
Page({
onLoad:function () {
wx.request({
url: 'https://....',
data:{projectid:"123"},
method:"GET",
success:function (res) {},
fail:function () {},
complete:function () {},
})
}
});
服务器请求默认超过时间和最大超过时间都是60秒,超过时间可以在app.json文件或game.json文件中通过networktimeout配置。
最终发送给服务器的数据是string类型,如果传入的data不是string类型会被转成string。
发起wx.request请求时也创建了一个requestTask对象,这个对象提供了以下三种方法:
- requestTask.abort(),中断请求任务;
- requestTask.onHeadersReceived(functioncallback),表示监听HTTP Response Header事件;
- requestTask.offHeadersReceived(function callback),表示取消监听HTTP
Response Header事件。
Page({
onLoad:function () {
var requestTask = wx.request({
url: 'https://....',
data:{projectid:"123"},
method:"GET",
success:function (res) {},
fail:function () {},
complete:function () {},
})
requestTask.onHeadersReceived(function (res) {
console.log("监听HTTP Response Header事件")
})
requestTask.offHeadersReceived(function (res) {
console.log("取消监听HTTP Response Header事件")
})
requestTask.abort();// 中断请求任务
}
});