微信小程序开发实战(21):发起HTTPS请求
发表时间:2021-1-11
发布人:葵宇科技
浏览次数:56
在 wx 对象中有一个 request 方法,可以发起 HTTPS 请求。该方法只有一个对象类型参数。该对象支持如下所示。
-
url : String 类型, 必选,开发者服务器接口地址,必须使用配置后的域名
-
data : Object 或 String 类型,可选,请求的参数
-
header : Object 类型,可选,设置请求的 header , header 中不能设置 Referer
-
method : String 类型,可选,请求的方法,默认为 GET ,有效值: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
-
dataType : String 类型,可选,响应数据的类型,默认为 json 。如果设置了 dataType 为 json ,则会尝试对响应的数据做一次 JSON.parse
-
success : Function 类型,可选,收到开发者服务成功返回的回调函数, res = {data: ' 开发者服务器返回的内容 '}
-
fail : Function 类型,可选,接口调用失败的回调函数
-
complete : Function 类型,可选, 接口调用结束的回调函数(调用成功、失败都会执行)
注意, data 属性可以是 Object ,也可以是 String 类型,但最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
-
对于 header['content-type'] 为 'application/json' 的数据,会对数据进行 JSON 序列化
-
对于 header['content-type'] 为 'application/x-www-form-urlencoded' 的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)。
要想测试 wx.request 方法,首先需要有一个使用 https 的链接,并且该链接的域名需要与小程序服务器配置中设置的一样。读者可以利用上一节介绍的腾讯云的二级域名,也可以在网上找一个 https 链接,但要注意,需要修改小程序服务器配置的“ request 合法域名”。这些 https 链接必须是在国内注册的,而且已经成功备案。
为了方便,这里使用了如下链接来测试 wx.request 方法。读者也可以使用其他的链接,但要求响应数据为 json 格式,因为后面的代码要测试 json 数据解析。
https://edu.51cto.com/index.php?do=spree&m=getGifts
因此,要将“ request 合法域名”设置为 https://edu.51cto.com ,否则 wx.request 方法无法请求该链接。
下面的代码使用 wx.request 方法请求该链接,并将 dataType 属性值设为 text/plain ,这样就会直接返回原始字符串。
wx.request({
url: 'https://geekori.com/download/test.txt',
dataType:'text/plain',
success: function(res) {
// 在控制台中直接输出返回的数据
console.log(res.data)
}
})
执行这段代码后,会在 Console 中输入如图 1 所示的信息,很明显,返回的是原始的 json 数据。
图1 响应数据是纯文本形式
现在将前面代码中的 dataType 属性去掉,这样 wx.request 方法会认为返回了 json 格式的数据(要将 test.txt 换成 data.json ,而且下载 json 格式的文件不能将 dataType 属性设为 text/plain ),并会对 json 格式的数据进行解析,也就是说,这时 res.data 就不再是字符串了,而是一个 JSON 对象。返回的结果如图 2 所示。
图2 以JSON格式返回数据
按着返回的 JSON 格式的数据,已经将其解析成相应的对象和数组格式。例如,如果要获取 data 对象中 coupons 数组第一个元素的 batchName 属性的值,可以使用下面的代码。
success: function(res) {
console.log(res.data.data.coupons[0].batchName);
}