微信小程序开发实战(21):发起HTTPS请求 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

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

发表时间:2021-1-11

发布人:葵宇科技

浏览次数:44

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);
}

相关案例查看更多