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


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 相关文章推荐
文字幻灯片
Jun 26 Javascript
javascript String 对象
Apr 25 Javascript
面向对象的Javascript之三(封装和信息隐藏)
Jan 27 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
javascript实现控制浏览器全屏
Mar 30 Javascript
Javascript中数组方法汇总(推荐)
Apr 01 Javascript
浅谈js script标签中的预解析
Dec 30 Javascript
通过AngularJS实现图片上传及缩略图展示示例
Jan 03 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
vue地址栏直接输入路由无效问题的解决
Nov 15 Javascript
es6中比较有用的7个技巧小结
Jul 12 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重定向的3种方式
2013/03/07 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
万能的php分页类
2017/07/06 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
python字符串连接的N种方式总结
2014/09/17 Python
Python中按值来获取指定的键
2019/03/04 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
python生成任意频率正弦波方式
2020/02/25 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
医学生自荐信范文
2013/12/03 职场文书
求职信需要的五点内容
2014/02/01 职场文书
四年级数学教学反思
2014/02/02 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书