繁体   English   中英

AJAX不会从登录页面更改/重定向到仪表板[烧瓶后端]

[英]AJAX not changing/redirecting from login page to dashboard [flask backend]

我正在使用post方法进行登录。 我的ajax函数将数据成功发送到我的Flask后端服务器[我知道,因为它返回了对我的ajax的响应]。 据说,从后端接收到响应后,我的ajax成功处理程序将导航/重定向到仪表板页面,但事实并非如此! 如何使其导航/重定向到另一个页面/ URL?它返回200状态代码,所以我不知道为什么它不显示仪表板页面。

我尝试过的内容:

我尝试使用window.location.href,window.location.replace,但无济于事,仍然无法正常工作。 我也尝试过将方法更改为GET,但方法仍然相同。 我也将async设置为false,因为如果我不将ajax设置为false,ajax将不会发布

AJAX

$.ajax({
    type: "POST",
    url: 'http://127.0.0.1:5000/processlogin',
    data: JSON.stringify(loginobject),
    contentType: "application/json;charset=utf-8",
    async: false,
    success: function (resp) {
        window.location.href = ("http://127.0.0.1:5000/dashboard");
    },//success
    failure: function (resp) {
        alert(resp.message);
    }

});

后端烧瓶功能此功能可100%使用。 已经使用POSTMAN对其进行了测试。 我还使用存储过程查询了数据库,并且运行良好。

这将显示登录表单

@app.route('/', methods=['GET','POST'])
def login():
    return render_template('login.html')

这将处理ajax的已发送数据。 简而言之,这是ajax与之通信的功能

@app.route('/processlogin', methods=['POST'])
def processlogin():
    loginobject = request.get_json(force=True)
    username = loginobject['username']
    password = loginobject['password']

    try:
        dbpassword = callstoredproc("getpassword", (username,))[0][0]
        if dbpassword == 'null':
            return jsonify({'status':'error', 'message':'Username does not exist!'})
        elif bcrypt.verify(password, dbpassword) == True:
            return jsonify({'status':'ok'})
    except Exception as e:
        print(e)

这就是我要显示的内容:仪表板html

@app.route('/dashboard', methods=['GET', 'POST'])
def dashboard():
    return render_template('dashboard.html')

卸下弯曲的支架,然后重试:

 
 
 
  
  window.location.href = "http://127.0.0.1:5000/dashboard";
 
  

它也可以与尖括号一起使用,因此只需确保您的响应正确到达成功回调即可。

另请参见关于SO的最佳答案

它也应该是错误而不是失败的错误回调。

error: function (resp) {
    alert(resp.message);
}

jsfiddle示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM