背景信息:框架Django,实现todolist的增删改画面的过程中
添加功能里面,做画面输入check的时候采用了Ajax进行POST请求(主要是为了输入check ng的时候把message打印出来,但是不想画面全部刷新,所以为了实现局部画面刷新的功能,采用了ajax)
(1)错误现象:在用ajax进行POST请求的时候,出现下面的错误
Exception happened during processing of request from ('127.0.0.1', 50977)
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 650, in process_request_thread
self.finish_request(request, client_address)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 720, in __init__
self.handle()
File "/Users/y**/.virtualenvs/TODOENV/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 174, in handle
self.handle_one_request()
File "/Users/y**/.virtualenvs/TODOENV/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 182, in handle_one_request
self.raw_requestline = self.rfile.readline(65537)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
**ConnectionResetError: [Errno 54] Connection reset by peer**
(2)原因:
html里面的form和ajax各自提交了一遍POST请求,导致上面错误
django本身框架下只有一个线程在处理请求,任何一个请求阻塞,就会影响另一个请求的响应
参照:https://blog.csdn.net/huapeng_guo/article/details/82761580
html代码:
<form class="form-inline" method="post" id="id_fm"> (①)
{% csrf_token %}
<span id="msg" class="alert alert-warning"></span>
<h4 class="col-md-2">ToDoList</h4>
。。。(略)
<button type="submit" class="btn btn-default" id="add">追加</button>
</form>
<script>
//todo 追加 (②)
$('#add').click(function() {
$.ajax({
url:'/addtodo/',
type:'POST',
dataType: 'JSON',
data: $('#id_fm').serialize(),
success:function(arg){
…略
}
}
)
})
</script>
(3)解决办法:
html里面按钮的type从submit改成button
修改前:
<button type="submit" class="btn btn-default" id="add">追加</button>
修改后
<input type="button" class="btn btn-default" id="add" value="追加">