微信小程序数据交互(wx.request)

对 wx.request 的理解

微信小程序的设计模式基本依照于前端设计 html+css+js,关于与后端数据的交互,小程序不能像传统后端开发语言一样,能直接连接操作数据库。小程序更多的是像前端界面,通过网络请求调用后端API来实现数据交互的,而这交互的方式则是依托于 wx.request 方法。
首先wx.request的一般架构可以看如下代码,或者参照 官方文档 进行编写:

wx.request({
  url: 'https://域名/Api/Index/PostLogin', //仅为示例,网络请求必须以https开头
  method: 'post', //http请求方法,默认为Get
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默认值
  },
  success(res) {	//这里是官方给出的写法,也可以写成 success: function(res){ … }
    console.log(res.data)
  },
  complete(res){
  }
})
以下为一个小案例:

微信小程序端的 login.wxml 页面代码,点击登录按钮通过form表单提交,就能调用login.js页面下的formSubmit方法,代码如图:
login.wxml页面代码
login.wxml页面的截面图如下:
login.wxml界面图
微信小程序端的 login.js 页面的formSubmit方法如下,“wx”是系统对象,类似于jquery中的 $ 符号,wx.request({ … })就如jquery中的 $.ajax({ … }),其中的参数与ajax方法类似,此处为post请求,传递的参数类型位json格式,调用方法为PostLogin。
login.js页面代码
外部API方法代码简单框架,省略中间环节代码,如下:

using WebControl.Areas.ServiceApi.Models;
using Framework;
using Model.Extend;
using System.Web.Http;
using System.Web.Http.Results;

namespace WebControl.Areas.ServiceApi.Controllers.login
{
    public class IndexController : ApiController
    {
        [HttpGet]
        public JsonResult<AjaxResult> GetLogin()
        {//省略中间环节
            return Json(new AjaxResult { state = ResultType.success.GetRemark(), message = "Get恭喜你,登录成功!", total = 1, data = "[]" });
        }

        [HttpPost]
        public JsonResult<AjaxResult> PostLogin([FromBody]LoginUser value)
        {//省略中间环节
            return Json(new AjaxResult { 
            state = ResultType.success.GetRemark(), 	//登录情况
            message = "Post恭喜你,登录成功!", 	//返回的msg
            total = 1, 		//比对信息记录数
            data = "{ \"ComId\":\"" + value.ComId + "\",\"UserId\":\"" + value.UserId + "\",\"Password\":\"" + value.Password +"\"}" });	//返回用户的登录数据
        }
    }
}

以下为Api相关类方法,用户登录模型(LoginUser)、返回结果数据集(AjaxResult)、枚举扩展类(RemarkExtend)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebControl.Areas.ServiceApi.Models
{
	/*
	用户登录模型
	*/
    public class LoginUser
    {
        public string ComId { get; set; }

        public string UserId { get; set; }

        public string Password { get; set; }
    }
}

using Model.Extend;
namespace Framework
{
    /// <summary>
    /// 返回结果数据
    /// </summary>
    public class AjaxResult
    {
        /// <summary>
        /// 操作结果类型
        /// </summary>
        public object state { get; set; }
        /// <summary>
        /// 获取 消息内容
        /// </summary>
        public string message { get; set; }
        /// <summary>
        /// 获取 返回数据
        /// </summary>
        public object data { get; set; }
        /// <summary>
        /// 总数据条数
        /// </summary>
        public int total { get; set; }
    }
    /// <summary>
    /// 表示 ajax 操作结果类型的枚举
    /// </summary>
    public enum ResultType
    {
        /// <summary>
        /// 成功结果类型
        /// </summary>
        [Remark("0")]
        success = 0,
        /// <summary>
        /// 消息结果类型
        /// </summary>
        [Remark("1")]
        info = 1,
        /// <summary>
        /// 警告结果类型
        /// </summary>
        [Remark("2")]
        warning = 2,
        /// <summary>
        /// 异常结果类型
        /// </summary>
        [Remark("3")]
        error = 3
    }

using System;
using System.Reflection;

namespace AutoCg.Model.Extend
{
    /// <summary>
    /// 指定一个标识性的属性,用于标识(枚举/字段)
    /// </summary>
    [AttributeUsage(AttributeTargets.Enum | AttributeTargets.Field)]
    public class RemarkAttribute : Attribute
    {
        public RemarkAttribute(string remark)
        {
            this.Remark = remark;
        }

        public string Remark { get; private set; }
    }

    public static class RemarkExtend
    {
        /// <summary>
        /// 扩展方法_获取枚举标识信息
        /// </summary>
        /// <param name="enumValue"></param>
        /// <returns></returns>
        public static string GetRemark(this Enum enumValue)
        {
            Type type = enumValue.GetType();
            FieldInfo field = type.GetField(enumValue.ToString());
            if (field.IsDefined(typeof(RemarkAttribute), true))
            {
                RemarkAttribute remarkAttribute = (RemarkAttribute)field.GetCustomAttribute(typeof(RemarkAttribute));
                return remarkAttribute.Remark;
            }
            else
            {
                return enumValue.ToString();
            }
        }
    }
}
  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值