09-微信小程序API网络请求(实现轮播广告和简易的聊天窗口)
微信小程序网络api的使用
微信小程序图片api的使用
微信小程序相机api的使用
微信小程序授权登录
实现小鱼租房首页
WePY介绍
插件演示
做项目的开发,一定离不开网络相关的操作,小程序做的都是客户端,客户端请求服务端做一些交互。
微信小程序提供的API的方式,通过API的方式可以调用微信提供的强大的功能,以增强小程序的功能,如:网络请 求、拍照、扫码等;详见以下官方文档。
如果单纯的做一些网页,用到拍照扫描等,需要写好多代码,现在可以调用微信封装好的API来实现。下面我们看一下微信api 的这些官方文档
在小程序/小游戏中使用网络相关的 API 时,需要注意下列问题,请开发者提前了解。
https
(wx.request、wx.uploadFile、wx.downloadFile) 和 wss
(wx.connectSocket) 协议;发起 HTTPS 网络请求。使用前请注意阅读相关说明。
通过request对象进行网络通信操作。
==说明: 每个微信小程序需要事先设置一个通讯域名,小程序只可以跟指定的域名与进行网络通信。包括普通 HTTPS 请求(wx.request)、上传文件(wx.uploadFile)、下载文件(wx.downloadFile) 和 WebSocket 通信 (vconnectSocket)==
RequestTask wx.request(Object object)
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
| string | 是 | 开发者服务器接口地址 | ||
| string/object/ArrayBuffer | 否 | 请求的参数 | ||
| Object | 否 | 设置请求的 header,header 中不能设置 Referer。 | ||
| number | 否 | 超时时间,单位为毫秒。默认值为 60000 | ||
| string | GET | 否 | HTTP 请求方法 | |
| string | json | 否 | 返回的数据格式 | |
| string | text | 否 | 响应的数据类型 | |
| boolean | false | 否 | 开启 http2 | |
| boolean | false | 否 | 开启 quic | |
| boolean | false | 否 | 开启 cache | |
| boolean | false | 否 | 是否开启 HttpDNS 服务。如开启,需要同时填入 httpDNSServiceId 。 HttpDNS 用法详见 移动解析HttpDNS | |
| string | 否 | HttpDNS 服务商 Id。 HttpDNS 用法详见 移动解析HttpDNS | ||
| boolean | false | 否 | 开启 transfer-encoding chunked。 | |
| boolean | false | 否 | wifi下使用移动网络发送请求 | |
| function | 否 | 接口调用成功的回调函数 | ||
| function | 否 | 接口调用失败的回调函数 | ||
| function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
data 参数说明
最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
GET
方法的数据,会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...
)POST
方法且 header['content-type']
为 application/json
的数据,会对数据进行 JSON 序列化POST
方法且 header['content-type']
为 application/x-www-form-urlencoded
的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
方法 | 描述 |
---|---|
中断请求任务 | |
监听 HTTP Response Header 事件。会比请求完成事件更早 | |
移除 HTTP Response Header 事件的监听函数 | |
监听 Transfer-Encoding Chunk Received 事件。当接收到新的chunk时触发。 | |
移除 Transfer-Encoding Chunk Received 事件的监听函数 |
object.method
的合法值
合法值 | 说明 |
---|---|
| HTTP 请求 OPTIONS |
| HTTP 请求 GET |
| HTTP 请求 HEAD |
| HTTP 请求 POST |
| HTTP 请求 PUT |
| HTTP 请求 DELETE |
| HTTP 请求 TRACE |
| HTTP 请求 CONNECT |
object.dataType
的合法值
合法值 | 说明 |
---|---|
| 返回的数据为 JSON,返回后会对返回的数据进行一次 JSON.parse |
| 不对返回的内容进行 JSON.parse |
object.responseType
的合法值
合法值 | 说明 |
---|---|
| 响应的数据为文本 |
| 响应的数据为 ArrayBuffer |
Object res
属性 | 类型 | 说明 | 最低版本 |
---|---|---|---|
data | string/Object/Arraybuffer | 开发者服务器返回的数据 | |
statusCode | number | 开发者服务器返回的 HTTP 状态码 | |
header | Object | 开发者服务器返回的 HTTP Response Header | |
cookies | Array.<string> | 开发者服务器返回的 cookies,格式为字符串数组 | |
profile | Object | 网络请求过程中一些调试信息,查看详细说明 | |
exception | Object | 网络请求过程中的一些异常信息,例如httpdns重试等 |
Object err
index.wxml
<swiper indicator-dots="true" autoplay="true" interval="3000" duration="500">
<swiper-item wx:for="{{images}}">
<image src="{{item.original}}" width="375" height="150" />
</swiper-item>
</swiper>
循环 images 图片数据,这个数据需要在data中做设置,进入index.js中,设置images数组,默认空
/**
* 页面的初始数据
* 默认设置 images 空的数组
*/
data: {
images:[]
},
在写一个方法,去加载数据
//加载广告数据
loadDate() {
},
在onLoad 中做加载,调用this.loadDate();方法
/**
* 生命周期函数--监听页面加载
*/
onLoad:function(options) {
console.log("页面加载完成",options);
this.loadDate();
},
现在编写loadDate();方法逻辑
可以拷贝官网中的示例代码做修改
<img src="2023微信小程序图片/image-20230807154716007.png" alt="image-20230807154716007" style="zoom:50%;" />
拷贝以上参考文档中的示例代码做如下修改
url
修改为自己用的, 找到自己项目的urlindex.js
//demo/index.js
Page({
data: {
images: []
},
loadData() {
const _this = this;
wx.showLoading({
title: '加载中',
});
wx.request({
url: 'http://127.0.0.1:18080/ad?type=1',
success(res) {
_this.setData({
images: res.data.data.list
});
wx.hideLoading();
}
})
},
onLoad(options) {
this.loadData();
}
})
新建一个im
文件,im
文件下新建 im.wxml
全局 app.json 中配置 im 页面
{
"pages":[
"pages/index/index",
"pages/logs/logs",
"pages/demo/index",
"pages/im/im"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#80ff80",
"navigationBarTitleText": "我的第一个微信小程序",
"navigationBarTextStyle":"black"
},
"tabBar": {
"list": [
{
"pagePath": "pages/index/index",
"text":"首页"
},
{
"pagePath": "pages/logs/logs",
"text":"日志"
},
{
"pagePath": "pages/demo/index",
"text":"Demo"
},
{
"pagePath": "pages/im/im",
"text":"IM"
}
]
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}
将案例代码拷贝到 im.wxml
中
/ pages/im/im.wxml/
<input name="url" value="ws://127.0.0.1:18081/ws/1001" bindinput="urlInput" />
<button size='mini' type="warn">断开连接</button>
<button size='mini' type="primary" bindtap="connectSocket">开启连接</button>
<textarea placeholder="输入发送内容" bindinput="msgInput"></textarea>
<button size='mini' type="primary" bindtap="sendMsg">发送</button>
<view wx:for="{{msgs}}">{{index}}: {{item}}</view>
在 im.wxss
中调整样式
/* pages/im/im.wxss */
input,textarea{
border: 1px black solid;
}
button,input,textarea,view{
margin: 10px;
}
效果图
在im.js
中写个connectSocket
方法来创建连接
可以参考官网拷贝代码修改
// pages/im/index.js
Page({
/**
* 页面的初始数据
*/
data: {
url: 'ws://127.0.0.1:18081/ws/1001',
msgs: [],
msg: ''
},
connectSocket() {
let _this = this;
let task = wx.connectSocket({
url: _this.data.url
});
task.onMessage(function (res) {
let data = JSON.parse(res.data);
let msg = data.from.id + ", " + data.msg;
_this.setData({
msgs: [..._this.data.msgs, "接收到消息 -> " + msg]
});
});
_this.setData({
socketTask: task,
msgs: [..._this.data.msgs, "连接成功!"]
});
},
urlInput(e) {
this.setData({
url: e.detail.value
});
},
msgInput(e) {
this.setData({
msg: e.detail.value
});
},
sendMsg() {
let msg = this.data.msg;
this.data.socketTask.send({
data: msg
});
this.setData({
msgs: [...this.data.msgs, "发送消息 -> " + msg]
});
}
})
效果图
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。