ajax成立不跳转,ajax中用window.location.href不跳转

先来看下实例,是一个form表单,提交相关信息后台校验是否正确,如果正确就跳转到相关的页面,如果出现错误就提示错误的信息。下面的实例在chrome浏览器中测试正常,但是到了IE或者火狐,就有很大的几率在接收到返回的正确状态后不进行跳转,开始以为是语法问题不兼容IE浏览器,IE确实不兼容xmlhttprequest对象为json的写法。将这个改了依然无法正常跳转,function accountLogin(){

var str="/ajax_checkAccount.action";

var data_str=encodeToUTF8(str);

var postData = $('#login_form').serialize();

$.ajax({

url: data_str,

type:'POST', //GET

data: postData,

async:false, //或false,是否异步

dataType:'json', //返回的数据格式:json/xml/html/script/jsonp/text

success:function(msg) {

if(msg.ret==0){

var t=msg.msg;

if(t!=null&&t!=""){

window.location.href="ok.html?"

$("#portal-login-tip").html(t);

alert(t);

}

}else if(msg.ret==1){

$("#InputAccount").focus();

$("#portal-login-tip").html("账号密码错误!!");

alert("账号密码错误!!");

}else if(msg.ret==2){

$("#InputAccount").focus();

$("#portal-login-tip").html("系统未启用帐号API接口!!");

alert("系统未启用帐号API接口!!");

return false;

}else if(msg.ret==3){

$("#InputAccount").focus();

$("#portal-login-tip").html("系统未匹配帐号API接口!!");

alert("系统未匹配帐号API接口!!");

}else{

$("#InputAccount").focus();

var t=msg.msg;

if(t==null||t==""){

$("#portal-login-tip").html("未知错误!!");

alert("未知错误!!");

}else{

$("#portal-login-tip").html(t);

alert(t);

}

}

},

error : function() {

// view("异常!");

alert("异常!");

}

})

}

掌握主流浏览器的调试模式是很有必要的,从浏览器的调试过程中发现跳转的步骤直接被挂起了,JS执行也是没有报错信息。

后面看地址栏像是form的提交格式,然后就找到真的问题了,在ajax提交过程完成后,form会发起正常的提交流程,所以导致无法进行正常的跳转。

解决方案:在ajax结束的位置增加一个参数,打断form的下一步提交,就能正常进行跳转了。

return false;

1. 在MySQL数据库中创建管理员表,包含id、用户名、密码等字段。 2. 在后端Java代码中创建管理员实体类,对应管理员表。 3. 创建管理员DAO类,实现对管理员表的增删改查操作。 4. 创建Controller类,处理管理员登录请求,调用DAO类进行验证,如果验证通过,则生成RSA公钥和私钥,将公钥返回给前端。 5. 在前端layUI页面中,使用ajax请求获取后端返回的RSA公钥,并将管理员密码使用RSA公钥进行加密。 6. 将加密后的密码通过ajax请求发送给后端进行验证,验证成功后跳转到管理员首页。 具体代码实现: 1. 创建管理员表 CREATE TABLE admin ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL, password varchar(50) NOT NULL, PRIMARY KEY (id) ); 2. 创建管理员实体类 public class Admin { private int id; private String username; private String password; // getter and setter methods } 3. 创建管理员DAO类 public class AdminDAO { // 数据库连接对象 private Connection conn; // 构造方法,获取数据库连接 public AdminDAO() { conn = DBUtil.getConnection(); } // 验证管理员用户名和密码 public boolean validate(String username, String password) { boolean result = false; try { String sql = "SELECT * FROM admin WHERE username=? AND password=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { result = true; } rs.close(); pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } return result; } } 4. 创建Controller类 public class AdminController { // 验证管理员用户名和密码 @RequestMapping(value="/admin/login", method=RequestMethod.POST) @ResponseBody public Map<String, Object> login(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> resultMap = new HashMap<String, Object>(); String username = request.getParameter("username"); String password = request.getParameter("password"); AdminDAO adminDAO = new AdminDAO(); boolean validateResult = adminDAO.validate(username, password); if (validateResult) { try { // 生成RSA公钥和私钥 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 将公钥返回给前端 resultMap.put("publicKey", publicKey.getModulus().toString(16)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } else { resultMap.put("msg", "用户名或密码错误!"); } return resultMap; } } 5. 前端layUI页面中的ajax请求代码 // 获取RSA公钥 $.ajax({ type: "POST", url: "/admin/login", dataType: "json", success: function(data){ var modulus = data.publicKey; var exponent = "10001"; var key = RSAUtils.getKeyPair(exponent, '', modulus); var password = RSAUtils.encryptedString(key, $('#password').val()); // 发送加密后的密码 $.ajax({ type: "POST", url: "/admin/login", data: {"username": $('#username').val(), "password": password}, dataType: "json", success: function(data){ if (data.msg) { layer.msg(data.msg); } else { window.location.href = "/admin/index"; } } }); } }); 6. 后端Controller类中的验证密码方法 // 验证管理员用户名和密码 @RequestMapping(value="/admin/login", method=RequestMethod.POST) @ResponseBody public Map<String, Object> login(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> resultMap = new HashMap<String, Object>(); String username = request.getParameter("username"); String password = request.getParameter("password"); // 解密密码 String privateKeyStr = request.getSession().getAttribute("privateKey").toString(); RSAPrivateKey privateKey = RSAUtils.getPrivateKey(privateKeyStr); String decryptedPassword = RSAUtils.decryptedString(privateKey, password); AdminDAO adminDAO = new AdminDAO(); boolean validateResult = adminDAO.validate(username, decryptedPassword); if (validateResult) { // 登录成功,跳转到管理员首页 resultMap.put("result", "success"); } else { resultMap.put("msg", "用户名或密码错误!"); } return resultMap; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值