Подтвердить что ты не робот

Ошибка: [Errno 32] Сломанная труба

Я работаю над проектом Django. Все прошло хорошо, пока я не создал запрос Ajax для отправки значений со страницы html на бэкэнд (views.py).

Когда я отправляю данные с помощью Ajax, я могу просмотреть значения, передаваемые view.py, и даже доходит до метода render_to_response и отображает мою страницу, но выдает ошибку разбитого трубопровода в терминале. Я не вижу каких-либо сбоев в программе, но я хотел знать, есть ли способ предотвратить эту ошибку. Я проверил другие ответы. Но пока не повезло.

Когда я пытаюсь нажать отправить снова на обновленной странице, я получаю это сообщение:

Страница, на которую вы ищете введенную информацию. Возврат на эту страницу может привести к повторению любого действия, которое вы приняли. Вы хотите продолжить? [Отправить] [Отменить] `

Вот дамп:

    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: Вот код, который я отправляю:

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

И вот мой view.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")

Я все еще сталкиваюсь с той же проблемой. Может кто-нибудь помочь мне с этим?

Изменить на 28/28/2014: Я только что выяснил причину "Сломанной трубы". Это произошло потому, что я не отправлял ответ от Python и просто ожидал, что страница будет обновляться автоматически. Я новичок во всем этом, и мне потребовалось некоторое время, чтобы понять, почему это произошло.

4b9b3361

Ответ 1

Вы не разместили какой-либо код, но это, вероятно, потому, что вы вызвали запрос Ajax на кнопку submit, но не предотвратили действие по умолчанию. Таким образом, запрос Ajax выполняется, но к моменту возврата данных браузер уже запросил следующую страницу, поэтому его не получилось.

Ответ 2

Я решил эту проблему, добавив следующее:

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

Потому что я нашел ошибку при отправке страницы с сообщением:

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

Затем я получил это решение и решил проблему выше.