解决ajax请求下,后台页面跳转无效问题
ajax实际上是通过XMLHttpRequest来向服务器发送异步请求的,从服务器获取数据,然后使用JS来更新页面,这也就是常说的局部刷新实现方式,所以ajax请求之后,服务器返回的都是纯文本流,客户端的浏览器在获取ajax异步结果时,不是直接显示在页面上,而是要通过js来进行处理,js处理完以后才能显示在页面上,所以这才导致了controller中的ModelAndView对象不能直接返回视图
解决方法:
将页面跳转的控制放到前端页面的js中来进行跳转,即location.href = 'xxxxxxx’
$.ajax({
url: "toMain",
type: "post",
data: {"username": name, "password": pwd},
success: function (data)
{
alert(data);
if(data==1)
{
window.location.href="toRealMain";
}
else
{
window.location.href="/";
}
}
});
window.location.href的用法
layui数据表格的使用和分页失效的问题解决
<!-- 数据表格 -->
<table id="demo" lay-filter="test"></table>
</div>
</div>
</div>
<!-- 引入 layui.js -->
<script src="../js/layui.js"></script>
<script>
layui.use(['element','table'], function(){
var element = layui.element;
var table = layui.table;
table.render({
elem: '#demo'
,height: 400
,url: 'getAllUsers'
,page: true
,cols: [
[
{field: 'id', title: 'ID', width:150, sort: true, fixed: 'left'}
,{field: 'useraccount', title: '用户名', width:150,sort:true}
,{field: 'userpassword', title: '密码', width:150, sort: true}
,{field: 'flag', title: '权限', width: 100,sort:true}
,{field: 'powerofcourse', title: '课程权限', width: 200,sort:true}
,{field: 'information', title: '信息', width: 200, sort: true}
]
]
, method: "post"
, page: true
, limits: [3, 5, 10]
, limit: 5
, parseData: function (res) {
var result;
if (this.page.curr) {
result = res.data.slice(this.limit * (this.page.curr - 1), this.limit * this.page.curr);
} else {
result = res.data.slice(0, this.limit);
}
return {
"code": res.code,
"msg": res.msg,
"count": res.count,
"data": result
};
}
});
});
$("#dropDown").click(function (){
window.localStorage.xfxAdminToken="null";
window.location.href="/";
window.event.returnValue=false;
})
</script>
controller层代码:
@ResponseBody
@PostMapping("/getAllUsers")
public String getAllManagers()
{
List<User> users = userService.list();
String jsonString = JSON.toJSONString(users);
System.out.println(jsonString);
String allManagers ="{\"code\":"+0+",\"msg\":\"ok\",\"count\":"+users.size()+",\"data\":"+jsonString+"}";
return allManagers;
}
layui中table展示后端数据
点了好多条都不知道说的什么,后面还是我自己总结出了解决的办法。table的渲染提供了一个后端接口的参数
然而这个接口要求后端的数据进行格式化的处理,然而这个会和分页功能产生冲突导致分页失效。layui还提供了data参数去渲染数据,建议使用layui的表格组件时不用url,直接用data去渲染数据,就是先请求后台,返回数据再render。
layui分页失效问题
layui数据表格分页无法正常显示
layui的数据表格的cols属性设置列的二维数组的[[…]]和thymeleaf的语法重复,因此在使用springboot的模板引擎进行渲染时,会报错误,解决方法如下:
,cols: [
[
{field: 'id', title: 'ID', width:150, sort: true, fixed: 'left'}
,{field: 'useraccount', title: '用户名', width:150,sort:true}
,{field: 'userpassword', title: '密码', width:150, sort: true}
,{field: 'flag', title: '权限', width: 100,sort:true}
,{field: 'powerofcourse', title: '课程权限', width: 200,sort:true}
,{field: 'information', title: '信息', width: 200, sort: true}
]
]
将[[…]]分割开来写
从ajax的回调函数(success等)中取返回值
对于ajax,一般情况下我们都是在success函数中进行逻辑处理,
但是在某些特定的时候我们需要在ajax外对返回值进行处理,这时我们只需要进行下面两个操作:
1、async设置为false,也就是同步;
2、在方法内ajax外设置一个全局变量,用这个变量去接收success函数内的返回值。
function VerifyServerToken(type)
{
if(type=="admin")
{
var ManagerName = "";
$.ajax({
url: "getManageName",
type: "post",
async : false,
data: {"adminToken": window.localStorage.xfxAdminToken},
success: function (name)
{
if (name.length <=0){
window.localStorage.xfxAdminToken = "null";
window.location.href = "/";
window.event.returnValue = true;
}
ManagerName=name;
}
});
return ManagerName;
}
}
ajax是异步请求,如果上面不让ajax变成同步请求,那么先执行完return语句,过了一会,ajax请求和成功回调函数才会执行完
layui-table表复选框勾选的所有行数据获取
layui-table表复选框勾选的所有行数据获取
<table class="layui-table" lay-data="{url:'******', id:'test3'}" lay-filter="test3">
<thead>
<tr>
<th lay-data="{type:'checkbox'}">ID</th>
<th lay-data="{field:'id', width:80}">ID</th>
<th lay-data="{field:'t1'}">测试项</th>
<th lay-data="{field:'t2', edit: 'text'}">标定参数</th>
<th lay-data="{field:'t3'}">标定值</th>
</tr>
</thead>
</table>
table.on('checkbox(test3)', function(obj){
var checkStatus = table.checkStatus('test3');
console.log(checkStatus.data)//选中行数据
console.log(checkStatus.data.length)
})
$('.ttes').click(function () {
var index = parent.layer.getFrameIndex(window.name);
var checkStatus = table.checkStatus('test3');
console.log(checkStatus.data)//选中行数据
var items = checkStatus.data;
table.on('tool(test)', function (obj) {
var data = obj.data;
if (obj.event === 'del') {
layer.confirm('确认删除当前管理员吗?', {
btn: ['删除', '取消']
, yes: function (index, layero) {
$.ajax({
url: "delManagerById",
type: "post",
data: {"id": data.id,"adminToken":adminToken},
success: function (data) {
if (data == 0) {
layer.alert('删除成功', {icon: 1});
obj.del();
}
else if(data==-1){
layer.msg('出现异常,删除失败', {icon: 5});
}
else if(data==-2)
{
window.localStorage.xfxAdminToken="null";
window.location.href="/";
window.event.returnValue=false;
}
}
});
layer.close(index);
}
, btn2: function (index, layero) {
layer.close(index);
}
});
}
});
table.on('checkbox(test)', function (obj) {
var checkStatus = table.checkStatus('test');
$("#topDelBtn").click(function () {
layer.confirm('确认批量删除选中的管理员?', {
btn: ['确认', '取消']
, yes: function (index, layero) {
var arr = new Array();
for (i = 0; i < checkStatus.data.length; i++) {
arr[i] = checkStatus.data[i].id;
}
$.ajax({
url: "delManagerByIds",
type: "post",
data: {"ids": arr,"adminToken":adminToken},
success: function (data) {
if (data == 0) {
layer.msg('删除成功', {icon: 6});
window.location.href = "toListAll";
window.event.returnValue = false;
}
else if (data == -1)
{
layer.msg('出现异常,删除失败,请重新尝试', {icon: 2});
}
else if(data==-2)
{
window.localStorage.xfxAdminToken="null";
window.location.href="/";
window.event.returnValue=false;
}
}
});
},
btn2: function (index, layero) {
layer.msg('删除失败', {icon: 5});
}
});
});
});
});
html网页什么样的字体最好看,css设置各种中文字体样式代码
html网页什么样的字体最好看,css设置各种中文字体样式代码
cookie,session,localStorage,sessionStorage的区别
cookie,session,localStorage,sessionStorage的区别
隐藏div常用的两种方法
style里面设置内样式:
1.display:none;
2.visibility:hidden;
layui弹出层,弹出表单或其他东西
/!*
如果是页面层
*/
layer.open({
type: 1,
content: '传入任意的文本或html'
});
layer.open({
type: 1,
content: $('#id')
});
$.post('url', {}, function(str){
layer.open({
type: 1,
content: str
});
});
/!*
如果是iframe层
*/
layer.open({
type: 2,
content: 'http://sentsin.com'
});
/!*
如果是用layer.open执行tips层
*/
layer.open({
type: 4,
content: ['内容', '#id']
});
|