Web项目实战 | 购物系统v2.0 | 开发记录(八)前后端分离初步思路 | JS处理URL参数实用函数 | AJAX 向后台传递Map类型数据 | MyBatis多表查询优化

" 常在河边走,哪能不湿鞋。" ——若发现文章内容有误,敬请指正,望不吝赐教,感谢!

文章目录

  • 以往记录
  • 一、使用JQuery设计工具函数处理URL
    • 功能一:直接获取替换参数值后的URL
    • 功能二:清空URL除第一个以外的参数
    • 功能三:封装URL的参数为Map/JSON类型
  • 二、JQuery AJAX 通过Map传输数据
  • 三、前后端分离思路:动态渲染Ajax请求返回的数据
  • 四、两种方式实现筛选查询
    • 思路一:代码限制查询的筛选条件
    • 思路二:通过改写Mapper映射文件实现多表查询+条件限制

以往记录


Web项目实战 | 购物系统v2.0 | 开发记录(一)需求分析 | 技术选型 | 系统设计 | 数据表设计 | SpringBoot、SSM、Thymeleaf、Bootstrap…

Web项目实战 | 购物系统v2.0 | 开发记录(二)搭建SpringBoot+SSM框架环境 | 配置Druid+MyBatis | 基于Bootstrap实现登陆页面| 图片验证码接口

Web项目实战 | 购物系统v2.0 | 开发记录(三)分页显示 | 根据商品名称进行模糊查询

Web项目实战 | 购物系统v2.0 | 开发记录(四)单个页面单个请求解决根据商品类型进行分页查询 | 使用省市区三级联动 | 使用JQuery 插件实现图片上传

Web项目实战 | 购物系统v2.0 | 开发记录(五)| 使用base64编码实现头像修改 | 用户个人信息修改 | JQuery动态提示

Web项目实战 | 购物系统v2.0 | 开发记录(六)商品详情页面 | 游客访问主页 | 运用Bootstrap4轻量级弹窗实现提示

Web项目实战 | 购物系统v2.0 | 开发记录(七)SpringBoot整合Shiro框架进行身份认证 | Shiro 加盐(MD5+Salt)验证登陆 | 数据表结构优化避免外键+设置中间表

一、使用JQuery设计工具函数处理URL


URL的作用非同小可,比如在百度搜索CSDN,观察地址栏可以发现有许多参数。
在这里插入图片描述
这些参数可以传输到SpringMVC的Controller层,后期有许多的用途,比如查询一个用户的映射地址为user/query,这时可以给它添加一个参数表示查询的用户信息,比如user/query?id=1,这时则表示查询id为1的用户,笔者通过URL的处理,实现了后台管理系统中用户信息多个条件搜索的功能。

JS实现代码:urlUtil.js

// 添加 或者 修改 url中参数的值
function clearURIExceptPageNow(){return document.location.href.split('&')[0]
}function getUrlParam(thisURL, name) {let array = new RegExp(name + '=([^&]*)').exec(thisURL);return (array == null || array.length < 1)? '' : decodeURI(array[1]);
}function updateUrlParam(thisURL, name, val) {thisURL = decodeURI(thisURL)// 如果 url中包含这个参数 则修改if (thisURL.indexOf(name+'=') > 0) {var v = getUrlParam(thisURL, name);if (v != null) {// 是否包含参数thisURL = thisURL.replace(name + '=' + v, name + '=' + val);}else {thisURL = thisURL.replace(name + '=', name + '=' + val);}} // 不包含这个参数 则添加else {if (thisURL.indexOf("?") > 0) {thisURL = thisURL + "&" + name + "=" + val;}else {thisURL = thisURL + "?" + name + "=" + val;}}return thisURL;
}
function updateCurrentUrlParam(name, val) {return updateUrlParam(document.location.href, name, val)
}
function getUrlParamToMap() {const params = window.location.toString().split('\?')[1]let map = new Map();if(params == null || params === '') return ''params.split('&').forEach(param =>{let kv = param.split('=');let k = kv[0]let v = kv[1]map.set(k,v)})return map
}
function getUrlParamToJSON() {let obj= Object.create(null)let map = getUrlParamToMap();if(map == null || map === '') return;for (let[k,v] of map) {k = decodeURI(k)v = decodeURI(v)obj[k] = v;}return JSON.stringify(obj)
}

功能一:直接获取替换参数值后的URL

比如当前地址栏的URL为:

user/query?id=1&roleName=普通用户

此时将查询用户ID为1,身份是普通用户的所有用户,当要切换查询的用户身份时,可以通过这个函数直接获取对应的URL

updateCurrentUrlParam('roleName', '管理员')

那么URL就会变成以下内容(其他的参数不会受影响)

user/query?id=1&roleName=管理员

功能二:清空URL除第一个以外的参数

比如当前地址栏请求的URL为:

user/query?pageNow=1&username=尤你&roleName=管理员

由于笔者固定第一个参数表示页数(分页查询),所以这里第一个参数不能清除,在clearURIExceptPageNow() 函数里保留了第一个参数,执行后的结果:

user/query?pageNow=1

功能三:封装URL的参数为Map/JSON类型

之前的函数都是基于URL内容上的修改,本质上都是字符串类型,主要用于修改当前的地址栏信息。

接下来是对其类型的封装,这样有助于通过AJAX请求向后台传递数据,直接将URL的参数传递到后台进行处理。

getUrlParamToJSON() 	// 将当前地址栏的参数值封装成JSON字符串(可传递到后台)getUrlParamToMap()		// 将当前地址栏的参数封装成map类型的对象

二、JQuery AJAX 通过Map传输数据


有了之前的工具函数后,现在操作URL的参数变得特别灵活,以获取用户信息为例:

function loadData(){$.ajax({url: '/admin/user/query',type: 'POST',data: getUrlParamToJSON(),dataType: 'JSON',contentType: 'application/json;charset=UTF-8',error: (err) =>{console.error(err)},success: (data) =>{console.error(data)//...}})
}

Controller层:

package com.uni.controller.admin;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.uni.base.RestResponse;
import com.uni.pojo.User;
import com.uni.service.UserService;
import com.uni.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.io.UnsupportedEncodingException;
import java.net.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部