Djangoプロジェクトに取り組んでいます。htmlページからバックエンド(views.py)に値を送信するAjaxリクエストを作成するまで、すべてうまくいきました。
Ajaxを使用してデータを送信すると、views.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
pdate:これが私が送信しているコードです:
$( 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);
}
});
});
});
そしてここに私のviews.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")
私はまだ同じ問題に直面しています。誰かがこれを手伝ってくれる?
2014年5月28日の編集:パイプが壊れた理由がわかりました。これは、Python=からの応答を返送せず、ページが自動的に更新されることを期待していたためです。私はこれすべての初心者であり、これがなぜなのかを理解するのにしばらく時間がかかりました起こりました。
コードを投稿していませんが、ボタン送信でAjaxリクエストをトリガーしたが、デフォルトのアクションを妨げていないことが原因である可能性があります。したがって、Ajax要求が行われますが、データを返すときまでに、ブラウザーはとにかく次のページを要求しているため、それを受信するものはありません。
これを追加することでこの問題を解決しました:
self.send_header("Access-Control-Allow-Origin", "*")
投稿リクエストページの送信でエラーが発生したため:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is there
それから私はこの解決策を得て、上記の問題を解決しました。