问题是:想点击登录根据返回的status信息实现跳转,但是返回的是个空的status。
直接上代码
前台请求的代码
<script>
window.onload = function() {
$("#login").click(function(){
var username = $("#username").val();
var password = $("#password").val();
var data = {"username":username,"password":password};
$.ajax({
url:'login',
type:'post',
data: data,
success: function(data,status){
if(status == 'success'){
location.href = 'manage_menu';
}
},
error: function(data,status){
if(status == 'error'){
alert("用户名或密码错误!请重新输入。")
location.href = 'login';
}
}
});
})
}
</script>
这个是路由里面的响应代码
router.post('/login',function(req,res){
return dao.User(req.body.username)
.then(function (error,result) {
var user={
username:result[0].username,
password:result[0].password
}
console.log(user);
if(req.body.username==user.username&&req.body.password==user.password){
req.session.user = user;
res.sendStatus(200);
}
else{
req.session.error = "用户名或密码不正确";
res.sendStatus(404);
}
});
数据库查询的代码
function User(username,callback) {
return db.msql.query('select * from User where username="'+username+'"')
.then(function (data) {
console.log(data);
return callback(null,data);
});
}
运行日志信息如下
express:router use / query +0ms
express:router use / expressInit +0ms
express:router use / logger +0ms
express:router use / jsonParser +41ms
express:router use / urlencodedParser +5ms
express:router use / cookieParser +1ms
express:router use / session +1ms
express:router use / serveStatic +3ms
express:router use / <anonymous> +6ms
express:router use / router +1ms
express:router use /users router +3ms
express:router use / <anonymous> +3ms
express:router use / <anonymous> +1ms
express:router use / <anonymous> +2ms
express:router dispatching POST /users/login +2s
express:router query : /users/login +5ms
express:router expressInit : /users/login +11ms
express:router logger : /users/login +3ms
express:router jsonParser : /users/login +8ms
express:router urlencodedParser : /users/login +9ms
express:router cookieParser : /users/login +52ms
express:router session : /users/login +3ms
express:router serveStatic : /users/login +6ms
express:router <anonymous> : /users/login +1ms
express:router router : /users/login +1ms
express:router dispatching POST /users/login +1ms
express:router trim prefix (/users) from url /users/login +3ms
express:router router /users : /users/login +20ms
express:router dispatching POST /login +4ms
express:router dispatching GET /users/login? +9ms
express:router query : /users/login? +1ms
express:router expressInit : /users/login? +2ms
express:router logger : /users/login? +5ms
express:router jsonParser : /users/login? +6ms
express:router urlencodedParser : /users/login? +4ms
express:router cookieParser : /users/login? +2ms
express:router session : /users/login? +10ms
express:router serveStatic : /users/login? +4ms
express:router <anonymous> : /users/login? +18ms
express:router router : /users/login? +2ms
express:router dispatching GET /users/login? +4ms
express:router trim prefix (/users) from url /users/login? +3ms
express:router router /users : /users/login? +3ms
express:router dispatching GET /login? +1ms
GET /users/login? 304 99.863 ms - -
POST /users/login - - ms - -
express:router dispatching GET /stylesheets/manage_style.css +79ms
express:router query : /stylesheets/manage_style.css +7ms
express:router expressInit : /stylesheets/manage_style.css +15ms
express:router logger : /stylesheets/manage_style.css +8ms
express:router jsonParser : /stylesheets/manage_style.css +5ms
express:router urlencodedParser : /stylesheets/manage_style.css +3ms
express:router cookieParser : /stylesheets/manage_style.css +1ms
express:router session : /stylesheets/manage_style.css +1ms
express:router serveStatic : /stylesheets/manage_style.css +6ms
GET /stylesheets/manage_style.css 304 38.838 ms - -
[ RowDataPacket { username: 'admin', password: 'admin' } ]
从日志里看是POST请求先响应了一个空的status,所以导致登录跳转不了,请大神帮忙看下是哪里写的不对,谢谢!
找到原因了。。是前台ajax请求的问题,ajax是异步执行的,没等查询数据库操作完成就返回了空值。
将ajax的async设置成false后执行顺序就对了,但是location.href=url不好用了。。。
解决方法是在回调函数后面加上return=false;
但是不知道原理是什么。。。