Django+;WebKit=管道破裂
我正在运行Django 1.2开发服务器,每当我使用Chrome或Safari从中加载页面时,都会收到这些断管错误消息。我的同事从他的开发服务器加载页面时,也会出现错误。我们在使用Opera或Firefox时没有这些错误Django+;WebKit=管道破裂,django,webkit,broken-pipe,Django,Webkit,Broken Pipe,我正在运行Django 1.2开发服务器,每当我使用Chrome或Safari从中加载页面时,都会收到这些断管错误消息。我的同事从他的开发服务器加载页面时,也会出现错误。我们在使用Opera或Firefox时没有这些错误 Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 281, in run self.finish_response()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 321, in finish_response self.write(data)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 417, in write self._write(data)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 300, in write self.flush()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 286, in flush self._sock.sendall(buffer)
error: [Errno 32] Broken pipe
有人能帮我吗?我快疯了 这不是Django的问题。您的浏览器很可能出现错误 这是经常发生的错误 每当浏览器关闭 在安装dev服务器时进行连接 仍在忙于发送数据
查看更多信息。我可能遇到了相关问题 在Windows上使用Safari和Chrome时,在django runserver上的本地计算机上,一些视图随机不返回对ajax POST请求的响应 解决办法是: 我通过POST传递给视图的数据只有一个键/val对:“action=remove”。现在,在我看来,我实际上并没有使用这些数据。一旦我将数据分配给视图中的一个var(即foo=request.POST['action']),视图每次都会返回对ajax请求的响应
绝对疯狂 我最近在django v1.1.1开发服务器和Chrome 7.0.517.44上遇到了这个问题 我发现的“修复”总是在初始加载后对页面进行硬刷新(按住Shift键并单击Chrome中的“重新加载”按钮),这会导致Chrome忽略刷新请求的任何资源的缓存 因此,这让我相信这是一个问题,因为Chrome臭名昭著地倾向于尽可能地缓存所有内容;即使不应该。我的猜测是Chrome正在发出一个资源请求,然后一旦意识到它已经缓存了资源,就会立即中断与该资源的连接
这几乎是一个可以忍受的解决方法,除非任何AJAX请求仍然会导致问题。当浏览器关闭与服务器的连接时,管道破裂。这个问题以前在与
相关的ajax post请求中发生过,这可能是由于javascript函数调度ajax调用时出错造成的
例如,该功能可能由链接上的单击事件触发,如果未阻止链接的默认操作,您将立即收到一个辅助请求,浏览器将关闭上一个连接,而不等待响应完成。
当我忘记向事件处理程序添加returnfalse
时,我也遇到了同样的问题
如果触发ajax的事件处理程序抛出异常,也会出现同样的症状
仔细调试发出ajax请求的函数和该函数的返回值。如果使用JavaScript
客户端出现这种情况,解决方案如下。
您必须在事件处理程序的开头和结尾添加preventDefault
和returnfalse
,如:
$('#btn_analyze').click(function(e) {
e.preventDefault()
$.post('/api/v1/analyzer/',
data,
"json").done(function(response) {
//...
}).fail(function() {
Logger.error(" Error ")
})
return false
}) // analyze click
运行请求的视图需要多长时间?第一次很快,但在我得到断管错误后,下一个页面加载需要10-15秒才能完成:SI在使用django开发服务器(1.3 pre alpha)时遇到了这个问题,这个答案是正确的,django没有故障(浏览器是Chrome/Safari)。通过将ajax请求作为POST而不是GET发送,我能够解决这个问题。由于某些原因,如果ajax请求是通过GET发出的,那么两个浏览器都没有等待响应。正确!@loretoparisi的答案给出了导致这种行为的原因。谢谢!我只是花了一个小时才弄明白,我需要jQueryAjax中的“returnfalse”。这篇文章只需要它,所以这一次把我甩了…@jmagnusson对,我在javascript客户端上也遇到了同样的问题,这就是为什么。然后在答案中解释!非常感谢。这正是导致Chrome出现问题的原因。Firefox会很好地理解它。向上投票!