在使用layui表单上传的时候,发现login.do的请求不能正确被触发,后端可以接收到前端传递过来的值但是地址栏的地址却依然是login.jsp,以至于无法正常跳转页面
地址栏
后端接收值
网络活动中也没有检测到login.do的请求
如果直接在地址栏输入login.do带参或者在form里直接写action和method都可以正常跳转,但是使用ajax请求不可以,请带佬们解惑
补充:发现没有贴js代码和后端代码
<script>
layui.use(function(){
var form = layui.form;
var layer = layui.layer;
var $ = layui.$;
// 提交事件
form.on('submit(demo-login)', function(data){
var field = data.field; // 获取表单字段值
var username = field.username;
var password = field.password;
/* alert("11"); */
// 此处可执行 Ajax 等操作
// $.get("login.do?username="+username+"&password="+password+"");
$.ajax({
type:"post",
url:"login.do",
dataType:"text",
async:false,
data:{"username":username,"password":password},
success:function(res){
layer.alert("欢迎");
}
})
return false; // 阻止默认 form 跳转
});
});
</script>
package com.sk.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 获取用户名和密码
String username = req.getParameter("username");
System.out.println(username);
String password = req.getParameter("password");
System.out.println(password);
// 创建安全管理工厂
// Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:jdbcrealm.ini");
// 创建安全管理器
// SecurityManager securityManager = factory.getInstance();
// 在当前环境安装这个安全管理器
// SecurityUtils.setSecurityManager(securityManager);
// 将获取到的用户名和密码封装到token里
UsernamePasswordToken upToken = new UsernamePasswordToken(username,password);
// 创建subject
Subject subject = SecurityUtils.getSubject();
try {
System.out.println("cccc");
subject.login(upToken);
System.out.println("1");
if (subject.isAuthenticated()) {
resp.sendRedirect("index.jsp");
// resp.getWriter().print("{\"code\":\"0\"}");
}else{
}
} catch (Exception e) {
System.out.println("qwe");
}
}
}
ajax请求是不会主动刷新页面的,如果想刷新页面,可在ajax的success函数里写代码,简单示例如下。
$.ajax({
type: 'get',
url: 'data.json',
success: function(res) {
// 这里写页面跳转的代码
location.href = '要跳转到的url地址'; // 跳转页面
}
});