10

微信小程序开发实战(21):发起HTTPS请求

 3 years ago
source link: https://blog.csdn.net/nokiaguy/article/details/108114706
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
微信小程序开发实战(21):发起HTTPS请求_李宁的极客世界bgJBm&nku$q$-CSDN博客

在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,这样就会直接返回原始字符串。

执行这段代码后,会在Console中输入如图1所示的信息,很明显,返回的是原始的json数据。

format,png

图1  响应数据是纯文本形式

现在将前面代码中的dataType属性去掉,这样wx.request方法会认为返回了json格式的数据(要将test.txt换成data.json,而且下载json格式的文件不能将dataType 属性设为text/plain),并会对json格式的数据进行解析,也就是说,这时res.data就不再是字符串了,而是一个JSON对象。返回的结果如图2所示。

format,png

图2  以JSON格式返回数据

按着返回的JSON格式的数据,已经将其解析成相应的对象和数组格式。例如,如果要获取data对象中coupons数组第一个元素的batchName属性的值,可以使用下面的代码。

对本文感兴趣,可以加李宁老师微信公众号(unitymarvel):

format,png

关注  极客起源  公众号,获得更多免费技术视频和文章。

format,png


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK