#8094 closed (invalid)
Html button inside html link gives pipe error!!!
Reported by: | italomaia | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | dev |
Severity: | Keywords: | error, html, strange | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Well, this one was pretty much weird bug. For what i know, both requests should work fine.
Clicking in the links below give me different results, with django. The first one works fine, but the second one shouts a broken pipe error.
<a href="url/to/django_view/">See</a> <a href="url/to/django_view/"><button>See</button></a> <== gives a broken pipe in the console
Using firefox3 plus django svn and ubuntu.
- To reproduce this error do as following:
- create a project
- create a app for it
- map a url to a view function in the app
- create the function
- create a template file with the code above, so that href points to your view through your url mapping.
Voiala!! Broken pipe error.
Change History (9)
comment:1 by , 16 years ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
follow-up: 4 comment:2 by , 16 years ago
Well, to reproduce the problem, simply create a link (<a>) that points to a view method. With a button or a image inside. Click in the botton or image and you'll get a broken pipe error in your console.
comment:3 by , 16 years ago
Here goes a nice traceback
Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 278, in run self.finish_response() File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 317, in finish_response self.write(data) File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 396, in write self.send_headers() File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 460, in send_headers self.send_preamble() File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 378, in send_preamble 'Date: %s\r\n' % http_date() File "/usr/lib/python2.5/socket.py", line 262, in write self.flush() File "/usr/lib/python2.5/socket.py", line 249, in flush self._sock.sendall(buffer) error: (32, 'Broken pipe')
comment:4 by , 16 years ago
Replying to italomaia:
Well, to reproduce the problem, simply create a link (<a>) that points to a view method. With a button or a image inside. Click in the botton or image and you'll get a broken pipe error in your console.
That may be what happens on your computer, but it doesn't on mine. I don't know what is going on here, but it isn't as simple as 'button in a link'.
comment:5 by , 16 years ago
Nor mine. I too tried recreating this when it was opened, and could not. Tried the reported Firefox 3 browser and a couple of others. "Broken pipe" means that when the dev server went to send the data for the response, the client browser had already closed its side of the connection. To figure out why you may need to take a network trace to perhaps get a clue what triggered the browser to close its side. From Django's perspective everything was fine until it went to send the response, at which point the client wasn't there to listen.
comment:6 by , 16 years ago
For what it's worth, I get a very similar error on OS X with Firefox 3. I first encountered the error trying to embed an image, created by a view, in my template.
comment:7 by , 16 years ago
Resolution: | worksforme |
---|---|
Status: | closed → reopened |
I have also seen this broken pipe issue when clicking on a URL that submits data to a form with method POST:
<form method='post' name='search_form'> {% for key, value in search_fields.items %} <input type="hidden" name="{{ key }}" value="{{ value }}" /> {% endfor %} <a href='url/to/django/view' onClick='document.search_form.submit()'> <==== Clicking URL gives a broken pipe </form>
I am seeing the same traceback as noted by [08/13/08 14:16:15 changed by italomaia].
I am using Firefox 3.0.4, Ubuntu 8.04 and Django 1.0 official release.
comment:8 by , 16 years ago
Resolution: | → invalid |
---|---|
Status: | reopened → closed |
Basically, it is an HTML error.
when you write something like :
<a href="url/to/django_view/"><button>See</button></a>
or
<a href='url/to/django/view' onClick='document.search_form.submit()'>
you're telling the browser to do 2 things in this order :
- Handle the javascript code (and do POST)
- Navigate to a new url (and do GET)
Use Firebug or look at Django console logs, you'll see the POST then the GET.
Django will handle the 2 requests without problem but the browser is waiting for 2 threads.
If browser was serializing threads (which is not what threads are made for), you wouldn't see any broken pipe.
But sometimes, the "GET thread" answers before the "POST thread", so the browser considers this is the "thread" to use and "considers" that the "POST thread" is useless, so it closes the connection, thus making Django raise "Broken Pipe".
What you're seeing is just a side-effect of browser thread concurrency.
Try to fix your html code like that :
<a href="javascript:document.search_form.submit();">See</a>
I can't reproduce this problem. Given that your test case doesn't involve any Django code - both links are standard GET requests as far as Django is concerned - you might want to look somewhere else for the cause of this problem.