web-dev-qa-db-de.com

fehler: [Errno 32] Defektes Rohr

Ich arbeite an einem Django-Projekt. Alles lief gut, bis ich eine Ajax-Anfrage erstellte, um Werte von der HTML-Seite an das Backend (views.py) zu senden. 

Wenn ich die Daten mit Ajax sende, kann ich die Werte sehen, die an views.py übergeben werden, und sogar die Methode render_to_response wird angezeigt, und meine Seite wird angezeigt. Der fehlerhafte Pipe-Fehler wird jedoch im Terminal ausgegeben. Ich sehe keine Störung des Programms, aber ich wollte wissen, ob es einen Weg gibt, diesen Fehler zu verhindern. Ich habe die anderen Antworten geprüft. Aber bisher kein Glück.

Wenn ich versuche, auf der aktualisierten Seite erneut auf "Senden" zu klicken, erhalte ich folgende Nachricht:

Die Seite, nach der Sie die von Ihnen eingegebenen Informationen gesucht haben. Wenn Sie zu dieser Seite zurückkehren, werden möglicherweise alle durchgeführten Aktionen wiederholt. Wollen Sie fortfahren? [Absenden] [Abbrechen] `

Hier ist die Müllkippe:

    Traceback (most recent call last):
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 34812)
----------------------------------------
  File "/usr/lib/python2.7/dist-packages/Django/core/servers/basehttp.py", line 284, in run
    self.finish_response()
  File "/usr/lib/python2.7/dist-packages/Django/core/servers/basehttp.py", line 324, in finish_response
    self.write(data)
  File "/usr/lib/python2.7/dist-packages/Django/core/servers/basehttp.py", line 403, in write
    self.send_headers()
  File "/usr/lib/python2.7/dist-packages/Django/core/servers/basehttp.py", line 467, in send_headers
    self.send_preamble()
  File "/usr/lib/python2.7/dist-packages/Django/core/servers/basehttp.py", line 385, in send_preamble
    'Date: %s\r\n' % http_date()
  File "/usr/lib/python2.7/socket.py", line 324, in write
    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

Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/dist-packages/Django/core/servers/basehttp.py", line 570, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 693, in finish
    self.wfile.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

Update: Hier ist der Code, den ich sende:

    $( document ).ready(function() {
$.csrftoken();
$("#submitdata").click(function(){
    //values = [tmode, fmode, t_cool, t_heat, hold];
    values = {
    "tmode": tmode,
    "fmode": fmode,
    "t_cool": t_cool,
    "t_heat": t_heat,
    "hold": hold
    };
    var jsonText = JSON.stringify(values);
    $.ajax({
        url: "/submitdata/",
        type: 'POST',
        data: jsonText,
        dataType: 'json',
        success:function(data){
            console.log(data.success);
        },
        complete:function(){
            console.log('complete');
        },
        error:function (xhr, textStatus, thrownError){
            console.log(thrownError);
            console.log(obj);
        }
    });       
});
});

Und hier sind meine Ansichten.py:

@login_required
def submitvalues(request):
    #context = RequestContext(request)
    if request.POST:
        jsonvalues = json.loads(request.raw_post_data)
        print jsonvalues
        return HttpResponse(json.dumps(dict(status='updated')), mimetype="application/json")

Ich stehe immer noch vor demselben Problem. Kann mir jemand dabei helfen?

Bearbeiten am 28.5.2014: Ich habe gerade den Grund für eine kaputte Pfeife herausgefunden. Dies war darauf zurückzuführen, dass ich die Antwort von Python nicht zurücksendete und nur erwartete, dass die Seite automatisch aktualisiert wurde. Ich bin ein Neuling für all das und brauchte eine Weile, um herauszufinden, warum dies geschah. 

13
kruthirshanks

Sie haben keinen Code gepostet. Dies liegt jedoch wahrscheinlich daran, dass Sie die Ajax-Anforderung für das Senden einer Schaltfläche ausgelöst haben, die Standardaktion jedoch nicht verhindert hat. Die Ajax-Anfrage wird also gestellt, aber wenn der Browser die Daten zurückgibt, hat der Browser die nächste Seite sowieso schon angefragt, so dass nichts vorhanden ist.

21
Daniel Roseman

Ich habe dieses Problem gelöst, indem ich Folgendes hinzugefügt habe:

self.send_header("Access-Control-Allow-Origin", "*")

Weil ich beim Senden der Postanforderungsseite einen Fehler gefunden habe:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is there

Dann habe ich diese Lösung bekommen und das obige Problem gelöst.

0
Cathy Lin