[英]flask “error: [Errno 32] Broken pipe” when using “return redirect(url_for…)”
我是Jquery的新手,正在尝试轮询服务器API以了解变量状态的变化。 一切正常,除了当我使用“ return redirect(url_for ...)”作为返回类型时,我遇到了“断线”。
我会以错误的方式处理吗? 我只想在变量更改时触发主视图,因为为该视图计算对象是昂贵的,并且如果状态相同则不需要。
Python代码:
@app.route('/status')
def check_deployment_status():
# get all the simpleDB domains
# the list of clusters are used to build the left nav
clusters = sdb_conn.get_domain('clusters')
cluster_id = request.args.get('id', '')
state = request.args.get('state', '')
# get that cluster from the list of clusters
cluster=clusters.get_item(cluster_id)
print "cluster state: " + cluster['state']
print "dashboard state: " + state
if cluster['state'] != state:
return redirect(url_for('cluster', id=cluster_id))
else:
return 'this'
jQuery代码:
$(document).ready(function() {
(function poll() {
setTimeout(function() {
$.ajax({
url: "/status",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json",
data: {"id": $('#id').text(), "state": $('#state').text()},
complete: poll,
timeout: 2000
})
}, 5000);
})();
});
错误,忘记发布错误:
Exception happened during processing of request from ('127.0.0.1', 56862)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 651, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 279, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
是的,我的想法是错误的(我认为)。 最后,我制作一个URL并将其作为jquery响应传递回去,并使用javascript处理重定向。 新的jquery函数如下所示:
$(document).ready(function() {
(function poll() {
setTimeout(function() {
$.ajax({
url: "/status",
type: "GET",
success: function(data) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
console.log(data.redirect);
},
dataType: "json",
data: {"id": $('#id').text(), "state": $('#state').text()},
complete: poll,
timeout: 2000
})
}, 5000);
})();
});
python就像这样:
@app.route('/status')
def check_deployment_status():
# get all the simpleDB domains
# the list of clusters are used to build the left nav
clusters = sdb_conn.get_domain('clusters')
cluster_id = request.args.get('id', '')
state = request.args.get('state', '')
# get that cluster from the list of clusters
cluster=clusters.get_item(cluster_id)
print "cluster state: " + cluster['state']
print "dashboard state: " + state
if cluster['state'] != state:
#return redirect(url_for('cluster', id=cluster_id))
return jsonify(redirect=url_for('cluster', id=cluster_id))
else:
return 'this'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.