在AJAX调用后重定向时烧瓶断管

时间:2016-11-17 21:32:39

标签: ajax flask flask-sqlalchemy

我有一个JQuery AJAX调用:

$.getJSON($SCRIPT_ROOT + '/_click_btn?btnId='+$(this).attr("id"),
          $('form').serialize(),
          function(data) {
             // return to send_messages page
             window.location = 'send_messages';
});

它没有任何花哨的东西。它只是将一些表单数据保存到数据库(使用SQLAlchemy)。我在window.location语句中设置了一个断点,如果我将重定向延迟1-2秒,则不会发生破坏的管道。处理此问题的最佳做法是什么?

另一个注意事项是在AJAX调用完成后数据库会话保持打开状态。

错误信息如下。

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 813, in __bootstrap_inner self.run()
File "/usr/lib64/python2.7/threading.py", line 766, in run self.__target(*self.__args, **self.__kwargs)
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 656, in inner srv.serve_forever()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 496, in serve_forever HTTPServer.serve_forever(self)
File "/usr/lib64/python2.7/SocketServer.py", line 238, in serve_forever
self._handle_request_noblock()
File "/usr/lib64/python2.7/SocketServer.py", line 297, in _handle_request_noblock
self.handle_error(request, client_address)
File "/usr/lib64/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib64/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usr/lib64/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib64/python2.7/SocketServer.py", line 655, in __init__
self.handle()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 216, in handle rv = BaseHTTPRequestHandler.handle(self)
File "/usr/lib64/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 251, in handle_one_request
return self.run_wsgi()
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 193, in run_wsgi
execute(self.server.app)
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 184, in execute
write(data)
File "/gui/venv/lib/python2.7/site-packages/werkzeug/serving.py", line 152, in write
self.send_header(key, value)
 File "/usr/lib64/python2.7/BaseHTTPServer.py", line 401, in send_header
self.wfile.write("%s: %s\r\n" % (keyword, value))
IOError: [Errno 32] Broken pipe

2 个答案:

答案 0 :(得分:1)

作为临时解决方案,我在重定向之前添加了500毫秒的延迟。似乎必须有更好的方法,但现在这种方法有效。

答案 1 :(得分:0)

我在Ubuntu VM上的Kubernetes上的Ubuntu Docker容器中也看到了这个错误:

(?!\d{15})

我创建了一个全新的Ubuntu xenial VM并在Kubernetes上的Ubuntu Docker容器中运行相同的代码,并且此错误,并且Python Flask按预期工作。我认为这是我的主机(Ubuntu VM)的问题。

相关问题