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


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 相关文章推荐
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
跟着Jquery API学Jquery之一 选择器
Apr 07 Javascript
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
JQuery与JS里submit()的区别示例介绍
Feb 17 Javascript
jquery实现的代替传统checkbox样式插件
Jun 19 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
Jun 10 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP伪静态页面函数附使用方法
2008/06/20 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
nodeJS模块简单用法示例
2018/04/21 NodeJs
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
python清除字符串里非数字字符的方法
2015/07/02 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python中的global关键字的使用方法
2019/08/20 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
生产部厂长职位说明书
2014/03/03 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
通用员工手册范本
2015/05/14 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
python 实现图片特效处理
2022/04/03 Python