ajax响应瓶没有重定向

ajax响应瓶没有重定向

问题描述:

当我从瓶视图功能发回URL到我的javascript文件,没有重定向发生,而是它返回一个Type error: 'NoneType' object is not subscriptableajax响应瓶没有重定向

我的看法功能:

@app.route('/login', methods=['POST','GET']) 
def login(): 
    if request.method == "POST": 
     print('check') 
     values = request.json 
     print(values) 
     result = db.session.query(Emp_Details).filter_by(ID=values['ID']).first() 
     print(result.Password) 
     if result.Password == values['Password'] and result.Department == 'HR': 
       print(jsonify(url=url_for('hr_department'))) 
       return jsonify(url=url_for('hr_department')) 
     elif result.Password == values['Password'] and result.Department == 'DEVELOPMENT': 
       return url_for('devs') 
     else: 
      abort(401) 
    else: 

     return render_template("login.html") 

我的Ajax请求:

$.ajax({ 
        type :"POST", 
        url :"/login", 
        contentType: 'application/json;charset=UTF-8', 
        data : JSON.stringify(data, null, '\t'), 
        dataType : 'json', 
        success : function (data) { 
         window.location.href = data['url'] 
        }, 
        error : function (response) { 
         alert(response) 

        }, 


       }); 

日志在我的控制台:

check 
{'Password': 'leechan2', 'ID': '10090'} 
leechan2 
<Response 25 bytes [200 OK]> 
127.0.0.1 - - [26/Dec/2016 23:34:37] "POST /login HTTP/1.1" 200 - 
check 
None 
127.0.0.1 - - [26/Dec/2016 23:34:37] "POST /login HTTP/1.1" 500 - 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 2000, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1991, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1567, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1641, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1544, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1639, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1625, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/gautham/Intern-flask/Intern/App.py", line 24, in login 
    result = db.session.query(Emp_Details).filter_by(ID=values['ID']).first() 
TypeError: 'NoneType' object is not subscriptable 
127.0.0.1 - - [26/Dec/2016 23:34:37] "GET /login?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 - 
127.0.0.1 - - [26/Dec/2016 23:34:37] "GET /login?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 - 
127.0.0.1 - - [26/Dec/2016 23:34:37] "GET /login?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 - 
127.0.0.1 - - [26/Dec/2016 23:34:37] "GET /login?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 - 
127.0.0.1 - - [26/Dec/2016 23:34:37] "GET /login?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 - 
127.0.0.1 - - [26/Dec/2016 23:34:37] "GET /login?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 - 
+0

使用'印刷(值)',看看你有什么变量。它似乎是'没有'。 – furas

+0

现在我在您的日志中看到'values'是'None' - 您可以在Chrome/Firefox中使用'DevTools'来查看当浏览器运行'$ .ajax'时发送的数据。 – furas

+0

您转换的数据的外观JSON在'$ .ajax'中?如果我使用'data = {'ID':'foobar'};'然后'JSON.stringify(data,null,'\ t'),'正确地发送它。 – furas

看来你有什么毛病,你送data

这个工作对我来说,如果我用

data = {'ID': 'foobar'}; 

HTML:

<script> 

    data = {'ID': 'foobar'}; 

    $.ajax({ 
     type: "POST", 
     url: "/test/ajax", 
     contentType: 'application/json;charset=UTF-8', 
     data: JSON.stringify(data, null, '\t'), 
     dataType: 'json', 
     success: function(data) { 
      window.location.href = data['url'] 
     }, 
     error: function(response) { 
      alert(response) 
     }, 
    }); 

</script> 

瓶:

@app.route('/test/ajax', methods=['GET', 'POST']) 
def test_ajax(): 

    if request.method == "POST": 
     data = request.json 
     print('data:', data) 

     result = {'url': url_for('index')} 
     print('result:', result) 

     return jsonify(result) 

    else: 
     return render_template('test-ajax.html') 
+0

正如你所见即使我的变量'数据'第一次有值,但我不明白为什么我的登录页面被称为即使有一个重定向,你可以清楚地看到第二次登录日志变量'data'是空的。每当我点击登录按钮时,它会调用两次登录方法,第一次再次发送适当的数据时,会自动使用空的“数据”变量调用登录页面。这里有什么问题? –