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


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 autocomplete自动完成插件的的使用方法
Aug 07 Javascript
javascript页面加载完执行事件代码
Feb 11 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
JavaScript对Json的增删改属性详解
Jun 02 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
AngularJS前端页面操作之用户修改密码功能示例
Mar 27 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
ant design vue datepicker日期选择器中文化操作
Oct 28 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/04/12 PHP
php session劫持和防范的方法
2013/11/12 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
js脚本实现数据去重
2014/11/27 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
代码分析Python地图坐标转换
2018/02/08 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
欢送退休感言
2014/02/08 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
python脚本框架webpy模板控制结构
2021/11/20 Python
电频谱管理的原则是什么
2022/02/18 无线电