ajax响应瓶没有重定向
问题描述:
当我从瓶视图功能发回URL到我的javascript文件,没有重定向发生,而是它返回一个Type error: 'NoneType' object is not subscriptable
。ajax响应瓶没有重定向
我的看法功能:
@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 -
答
看来你有什么毛病,你送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'是空的。每当我点击登录按钮时,它会调用两次登录方法,第一次再次发送适当的数据时,会自动使用空的“数据”变量调用登录页面。这里有什么问题? –
使用'印刷(值)',看看你有什么变量。它似乎是'没有'。 – furas
现在我在您的日志中看到'values'是'None' - 您可以在Chrome/Firefox中使用'DevTools'来查看当浏览器运行'$ .ajax'时发送的数据。 – furas
您转换的数据的外观JSON在'$ .ajax'中?如果我使用'data = {'ID':'foobar'};'然后'JSON.stringify(data,null,'\ t'),'正确地发送它。 – furas