微信小程序 网络通信实现详解


Posted in Javascript onJuly 23, 2019

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

wx.request({
 url: 'test.php', //仅为示例,并非真实的接口地址
 data: {
  x: '',
  y: ''
 },
 header: {
  'content-type': 'application/json' // 默认值
 },
 success (res) {
  console.log(res.data)
 }
})

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

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

微信小程序 网络通信实现详解

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

login.js

// pages/login/login.js
Page({

 /**
  * 页面的初始数据
  */
 data: {
  username: "",
  password: ""

 },
  register:function(e){
  wx.navigateTo({
   url: '../register/register'
  })

 },
 formSubmit: function(e) {
  console.log(e.detail.value.email);
  console.log(e.detail.value.pwd)
  var username = e.detail.value.email;
  var password = e.detail.value.pwd;
  var emailReg = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
  if (username == null || username == "") {
   wx.showToast({
    title: "用户名不能为空",
    icon: 'none',
    duration: 1500
   })
  } else if (!emailReg.test(username)) {

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

  } else if (password == null || password == "") {
   wx.showToast({
    title: "密码不能为空",
    icon: 'none',
    duration: 1500
   })
  } else {
   wx.request({

    url: getApp().globalData.urlPath + "sysUser/login",
    method: "POST",
    data: {
     username: username,
     password: password
    },
    header: {
     "Content-Type": "application/x-www-form-urlencoded"
    },
    success: function(res) {
     console.log(res.data);
     if (res.statusCode == 200) {

      //访问正常
      if (res.data.code == "000000") {
       wx.showToast({
        title: "登陆成功",
        icon: 'success',
        duration: 2000,
        success: function() {
         wx.navigateTo({
          url: '../manage/manage'
         })

         wx.setStorage({
          key: 'userId',
          data: res.data.user.userCode
         })

         wx.setStorage({
          key: 'userName',
          data: res.data.user.userName
         })
         console.log("test:" + wx.getStorageSync('userName'));
        }
       })

      } else if (res.data.code == "111111") {
       wx.showToast({
        title: "密码错误",
        icon: 'none',
        duration: 1500
       })
      } else {
       wx.showToast({
        title: "该用户不存在",
        icon: 'none',
        duration: 1500
       })
      }
     } else {

      wx.showLoading({
       title: '系统异常',
       fail
      })

      setTimeout(function() {
       wx.hideLoading()
      }, 2000)
     }

    }
   })
  }

 }
})

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

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

表单校验的效果如图:

微信小程序 网络通信实现详解

微信小程序 网络通信实现详解

代码说明:

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

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

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

e.detail.value.email;

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

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

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

login.json:

{
 "usingComponents": {}
}

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

lgoin.wxml:

<view class='container'>
 <view class='header'>
  <text>acs系统</text>
 </view>
  <view>
  <text>\n</text>
 </view>
 <view class='header'>
 </view>
 <form bindsubmit="formSubmit">
  <view class='section'>
   <text>用户名:</text>
   <input type='text' name="email" placeholder='请输入邮箱' />
  </view>
  <view class='section'>
   <text>密码:</text>
   <input password='password' name="pwd" placeholder='请输入密码' />
  </view>
  <view class='button'>
   <button type='primary' form-type='submit'>登录</button>
   <text>\n</text>
    <view bindtap='register' class="register">注册</view>
  </view>
 </form>

</view>

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

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

login.wxss:

/* pages/login/login.wxss */
form{
 width: 310px;
 height: 240px;
 line-height: 40px;
 /* border: 1px solid red; */
}
input{
 border: 1px solid #ccc;
 width: 310px;
 height: 40px;
}
.button{
 margin-top: 20px;
}
.header text{
 font-size: 25px;
 color: #666;
}
form text{
 font-size: 20px;
 color: #666;
}
.register{
color:black;
display: block;
width: 310px;
height: 40px;
border: 1px solid #ccc;
text-align: center;
}

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

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

wx.request

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

Javascript 相关文章推荐
基于jQuery的弹出消息插件 DivAlert之旅(一)
Apr 01 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
JS中闭包的经典用法小结(2则示例)
Dec 28 Javascript
详解Angular Reactive Form 表单验证
Jul 06 Javascript
详解vue axios中文文档
Sep 12 Javascript
js处理包含中文的字符串实例
Oct 11 Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 Javascript
JavaScript错误处理操作实例详解
Jan 04 Javascript
用Angular实现一个扫雷的游戏示例
May 15 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
微信小程序 确认框的实现(附代码)
Jul 23 #Javascript
koa2 从入门到精通(小结)
Jul 23 #Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 #Javascript
前端插件之Bootstrap Dual Listbox使用教程
Jul 23 #Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
Jul 23 #Javascript
vscode vue 文件模板的配置方法
Jul 23 #Javascript
Vue中对iframe实现keep alive无刷新的方法
Jul 23 #Javascript
You might like
PHP 程序员也要学会使用“异常”
2009/06/16 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
Laravel实现表单提交
2017/05/07 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
jquery图片切换插件
2015/03/16 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
Python中的下划线详解
2015/06/24 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
管理学院毕业生自荐信范文
2014/03/10 职场文书
经济管理专业求职信
2014/06/09 职场文书