按下登录按钮后,它会将整个 error.html 文件打印到 Web 控制台,而不是重定向到 userhome.html,这是哪里出错了,干杯!所有的代码都在下面......
python :
@app.route('/ValidateLogin',methods=['POST'])
def ValidateLogin():
try:
_username = request.form['username']
_password = request.form['password']
#connection to MySQL
cur = mysql.connection.cursor()
cur.callproc('sp_validateLogin', (_username,))
data = cur.fetchall()
if len(data) > 0:
if check_password_hash(str(data[0][3]), _password):
session['user'] = data[0][0]
return redirect('/UserHome')
else:
return render_template('error.html', error = 'Wrong Email Address or Password')
else:
return render_template('error.html', error = "Invalid Email Address or Password")
except Exception as e:
return render_template('error.html', error = str(e))
finally:
cur.close()
JS:
$(function() {
$('#btnSignIn').click(function() {
$.ajax({
url: '/ValidateLogin',
data: $('form').serialize(),
type: 'POST',
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
});
});
最佳答案
当输入正确的用户凭据时,它正在重定向到/UserHome
。
您可以通过查看如下所示的请求日志来确认:
127.0.0.1 - - [28/Apr/2016 22:27:59] "POST /ValidateLogin HTTP/1.1" 302 - 127.0.0.1 - - [28/Apr/2016 22:27:59] "GET /UserHome HTTP/1.1" 200 -
您可以看到 $.ajax()
生成的对 /ValidateLogin
的 POST 请求被响应为 302 重定向到 /UserHome
随后是 $.ajax()
。这是自动发生的,因此您的 javascript 没有机会对重定向进行操作。
引用this answer ,一种解决方案是让您的服务器发送一个 JSON 响应,其中包含一个“位置”URL,以便在登录成功时重定向到。然后让您的 success()
处理程序使用 window.location.replace(location)
重定向浏览器。
如果登录不成功,则从 error.html
模板呈现的 HTML 可能会在不同的 JSON 项中返回,该 success()
处理程序(因为您现在应该总是得到 200 响应)用于设置文档内容。检查引用答案中的一些代码,这些代码显示了如何在客户端处理它。
关于javascript - 验证用户登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36913656/