web-dev-qa-db-fra.com

erreur: [Errno 32] tuyau cassé

Je travaille sur un projet Django. Tout s'est bien passé jusqu'à ce que je crée une requête Ajax pour envoyer des valeurs de la page HTML au backend (views.py). 

Lorsque j'envoie les données à l'aide d'Ajax, je suis en mesure d'afficher les valeurs transmises à views.py. Il atteint même la méthode render_to_response et affiche ma page, mais renvoie l'erreur de canal cassé dans le terminal. Je ne vois aucune sorte de perturbation dans le programme, mais je voulais savoir s'il y avait un moyen d'empêcher cette erreur de se produire. J'ai vérifié les autres réponses. Mais pas de chance jusqu'à présent.

Lorsque j'essaie de cliquer à nouveau sur submit sur la page actualisée, je reçois le message suivant:

La page que vous recherchez utilise les informations que vous avez entrées. Revenir à cette page peut entraîner la répétition de toute action entreprise. Voulez-vous continuer? [Soumettre] [Annuler] `

Voici le dépotoir:

    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

Mise à jour: Voici le code que j'envoie:

    $( 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);
        }
    });       
});
});

Et voici mon point de vue.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")

Je suis toujours confronté au même problème. Quelqu'un peut il m'aider avec ça?

Éditer le 28/05/2014: Je viens de comprendre la raison d'un tuyau cassé. C'est parce que je ne renvoyais pas la réponse de Python et que j'attendais simplement que la page s'actualise automatiquement. Je suis un débutant à tout cela, et il m'a fallu un certain temps pour comprendre pourquoi cela s'est produit. 

13
kruthirshanks

Vous n'avez posté aucun code, mais c'est probablement parce que vous avez déclenché la demande Ajax sur un bouton submit mais que vous n'avez pas empêché l'action par défaut. La requête Ajax est donc faite, mais au moment de retourner les données, le navigateur a de toute façon déjà demandé la page suivante. Il n'y a donc rien pour la recevoir.

21
Daniel Roseman

J'ai résolu ce problème en ajoutant ceci:

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

Parce que j'ai trouvé une erreur sur l'envoi de la page de demande de publication:

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

Ensuite, j'ai eu cette solution et résolu le problème ci-dessus.

0
Cathy Lin