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


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 相关文章推荐
Javascript结合css实现网页换肤功能
Nov 02 Javascript
关于可运行代码无法正常执行的使用说明
May 13 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
Jan 23 Javascript
Js冒泡事件详解及阻止示例
Mar 21 Javascript
JavaScript错误处理
Feb 03 Javascript
浅析js绑定事件的常用方法
May 15 Javascript
总结Javascript中的隐式类型转换
Aug 24 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
React-Native使用Mobx实现购物车功能
Sep 14 Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
Apr 20 Javascript
微信小程序 确认框的实现(附代码)
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学习 变量使用总结
2011/03/24 PHP
PHP插入排序实现代码
2013/04/04 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
js中unicode转码方法详解
2015/10/09 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
35个Python编程小技巧
2014/04/01 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
python 上下文管理器使用方法小结
2017/10/10 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Python如何对XML 解析
2020/06/28 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
会计专业自荐信范文
2013/12/02 职场文书
医学专业自荐信
2014/06/14 职场文书
2014年技术部工作总结
2014/12/12 职场文书
太行山上观后感
2015/06/05 职场文书
2015大学迎新标语
2015/07/16 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS