经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 微信小程序 » 查看文章
微信小程序 网络通信实现详解
来源:jb51  时间:2019/7/23 13:12:43  对本文有异议

关于网络通信,这里我使用的是wx.request,官方代码示例如下:

  1. wx.request({
  2. url: 'test.php', //仅为示例,并非真实的接口地址
  3. data: {
  4. x: '',
  5. y: ''
  6. },
  7. header: {
  8. 'content-type': 'application/json' // 默认值
  9. },
  10. success (res) {
  11. console.log(res.data)
  12. }
  13. })

对于初学者而言,官方示例可能会看不怎么懂,所以我就以我自己当初项目驱动学习的方式(开发个人的记账小程序)来作为学习实例。

以登录来说,效果图如下:

此次示例包含表单校验和网络请求,代码如下:

login.js

  1. // pages/login/login.js
  2. Page({
  3.  
  4. /**
  5. * 页面的初始数据
  6. */
  7. data: {
  8. username: "",
  9. password: ""
  10.  
  11. },
  12. register:function(e){
  13. wx.navigateTo({
  14. url: '../register/register'
  15. })
  16.  
  17. },
  18. formSubmit: function(e) {
  19. console.log(e.detail.value.email);
  20. console.log(e.detail.value.pwd)
  21. var username = e.detail.value.email;
  22. var password = e.detail.value.pwd;
  23. var emailReg = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
  24. if (username == null || username == "") {
  25. wx.showToast({
  26. title: "用户名不能为空",
  27. icon: 'none',
  28. duration: 1500
  29. })
  30. } else if (!emailReg.test(username)) {
  31.  
  32. wx.showToast({
  33. title: "邮箱有误",
  34. icon: 'none',
  35. duration: 1500
  36. })
  37.  
  38. } else if (password == null || password == "") {
  39. wx.showToast({
  40. title: "密码不能为空",
  41. icon: 'none',
  42. duration: 1500
  43. })
  44. } else {
  45. wx.request({
  46.  
  47. url: getApp().globalData.urlPath + "sysUser/login",
  48. method: "POST",
  49. data: {
  50. username: username,
  51. password: password
  52. },
  53. header: {
  54. "Content-Type": "application/x-www-form-urlencoded"
  55. },
  56. success: function(res) {
  57. console.log(res.data);
  58. if (res.statusCode == 200) {
  59.  
  60. //访问正常
  61. if (res.data.code == "000000") {
  62. wx.showToast({
  63. title: "登陆成功",
  64. icon: 'success',
  65. duration: 2000,
  66. success: function() {
  67. wx.navigateTo({
  68. url: '../manage/manage'
  69. })
  70.  
  71. wx.setStorage({
  72. key: 'userId',
  73. data: res.data.user.userCode
  74. })
  75.  
  76. wx.setStorage({
  77. key: 'userName',
  78. data: res.data.user.userName
  79. })
  80. console.log("test:" + wx.getStorageSync('userName'));
  81. }
  82. })
  83.  
  84. } else if (res.data.code == "111111") {
  85. wx.showToast({
  86. title: "密码错误",
  87. icon: 'none',
  88. duration: 1500
  89. })
  90. } else {
  91. wx.showToast({
  92. title: "该用户不存在",
  93. icon: 'none',
  94. duration: 1500
  95. })
  96. }
  97. } else {
  98.  
  99. wx.showLoading({
  100. title: '系统异常',
  101. fail
  102. })
  103.  
  104. setTimeout(function() {
  105. wx.hideLoading()
  106. }, 2000)
  107. }
  108.  
  109. }
  110. })
  111. }
  112.  
  113. }
  114. })

关于login.js,主要是写通信逻辑的,与咱们平时写js差异并不大,唯一不同的就是api长得不样罢了。

关于其中的getApp().globalData.urlPath,相当于全局变量,不用我每次都写一大串https之类的。

表单校验的效果如图:

代码说明:

显示消息提示框(相当于js的alert提示):

  1. wx.showToast({
  2. title: "邮箱有误",
  3. icon: 'none',
  4. duration: 1500
  5. })

获取input属性为name的值(相当于js中form.email.value,前提是这个表单name要为form,且form中的input要存在一个name=”email”)

  1. e.detail.value.email;

跳转代码(相当于window.location.href):

  1. wx.navigateTo({
  2. url: '../manage/manage'
  3. })

至于wx.request,我想只要是写过ajax的,都很好理解。

login.json:

  1. {
  2. "usingComponents": {}
  3. }

关于这个login.json有什么用,我唯一想到的是页面的title(其实相当于html中的title)

lgoin.wxml:

  1. <view class='container'>
  2. <view class='header'>
  3. <text>acs系统</text>
  4. </view>
  5. <view>
  6. <text>\n</text>
  7. </view>
  8. <view class='header'>
  9. </view>
  10. <form bindsubmit="formSubmit">
  11. <view class='section'>
  12. <text>用户名:</text>
  13. <input type='text' name="email" placeholder='请输入邮箱' />
  14. </view>
  15. <view class='section'>
  16. <text>密码:</text>
  17. <input password='password' name="pwd" placeholder='请输入密码' />
  18. </view>
  19. <view class='button'>
  20. <button type='primary' form-type='submit'>登录</button>
  21. <text>\n</text>
  22. <view bindtap='register' class="register">注册</view>
  23. </view>
  24. </form>
  25.  
  26. </view>

wxml相当于视图(如html或者模板语言(jsp、volocity、freemarker、beetl等))

视图除了可以写一些标签之类的,还可以写一些逻辑判断。后面会讲到的。

login.wxss:

  1. /* pages/login/login.wxss */
  2. form{
  3. width: 310px;
  4. height: 240px;
  5. line-height: 40px;
  6. /* border: 1px solid red; */
  7. }
  8. input{
  9. border: 1px solid #ccc;
  10. width: 310px;
  11. height: 40px;
  12. }
  13. .button{
  14. margin-top: 20px;
  15. }
  16. .header text{
  17. font-size: 25px;
  18. color: #666;
  19. }
  20. form text{
  21. font-size: 20px;
  22. color: #666;
  23. }
  24. .register{
  25. color:black;
  26. display: block;
  27. width: 310px;
  28. height: 40px;
  29. border: 1px solid #ccc;
  30. text-align: center;
  31. }

这个wxss就相当于css,定义视图的样式,决定视图长什么样(好看不好看)

关于微信小程序网络通信,更多信息可以参考官方文档:

wx.request

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号