ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
一、問題描述
今天在django中調用ajax時,報錯了:
Exception happened during processing of request from ('127.0.0.1', 7160) Traceback (most recent call last):File "E:\DevelopSoftware\Anaconda3\envs\mxonline\lib\socketserver.py", line 650, in process_request_threadself.finish_request(request, client_address)File "E:\DevelopSoftware\Anaconda3\envs\mxonline\lib\socketserver.py", line 360, in finish_requestself.RequestHandlerClass(request, client_address, self)File "E:\DevelopSoftware\Anaconda3\envs\mxonline\lib\socketserver.py", line 720, in __init__self.handle()File "E:\DevelopSoftware\Anaconda3\envs\mxonline\lib\site-packages\django\core\servers\basehttp.py", line 153, in handleself.handle_one_request()File "E:\DevelopSoftware\Anaconda3\envs\mxonline\lib\site-packages\django\core\servers\basehttp.py", line 161, in handle_one_requestself.raw_requestline = self.rfile.readline(65537)File "E:\DevelopSoftware\Anaconda3\envs\mxonline\lib\socket.py", line 589, in readintoreturn self._sock.recv_into(b) ConnectionAbortedError: [WinError 10053] 你的主機中的軟件中止了一個已建立的連接。ajax就是普通的jquery中的ajax:
var my_email = {"email":email}; $.ajax({type: "POST",contentType: "application/json; charset=utf-8",headers: { "X-CSRFToken": token_csrf },url: "/myemail/",dataType: "json",cache: false,data: JSON.stringify(my_email),async : true,timeout: 5000,error: function (data) {alert("服務器錯誤!郵件發送失敗!");},success: function (data) {if (null != data && "" != data) {if(data.status == "1"){alert("郵件發送成功,請查收!");}else{alert("郵件發送錯誤!")}}} });二、處理
平時這么寫也沒報錯,今天這樣寫怎么就報錯了,我就納了悶了。網上查了半天,說是要把異步改成同步,也就是把ajax中的 async:true 改成 async:false。
改了以后發現確實不報錯了,但又出現一個比較嚴重的問題是,使用同步后因為ajax要等后端返回數據,而我后端因為要調用發送郵件的函數,處理的比較慢,因此前端就一直處于假死的狀態。因此這樣改對于我來說還是不能接受的。
然后又查了很多資料,說是使用$.Deferred(); 以及 async/await?異步請求等待返回數據。但是我嘗試后,發現一中的問題又雙叒出現了!又給我報錯了。
?
三、轉機
然后感謝這篇文章:https://www.bbsmax.com/A/ZOJPmXOe5v/
突然明白為什么會報這個錯了,是因為我網頁刷新導致ajax和服務器的連接斷開了!而為什么我的網頁會刷新呢?
?
因為我把這個ajax請求綁在了一個超鏈接a標簽上,
<a href="{% url 'resume:download' %}" class="btn-rounded-white" onclick="disp_prompt()">下載我的簡歷</a>由于異步的原因,ajax在等待后端返回數據的時候,瀏覽器會繼續往下執行跳轉a的超鏈接的操作,然后就會導致ajax與后端的連接斷開!于是把a標簽改成button標簽,問題解決!!
?
另外,參考:https://blog.csdn.net/BobYuan888/article/details/107871596
button的type有三種:button、reset、submit,如果沒寫type,默認type不是你以為的“button”,而是“submit”,“submit”,“submit”!!!頁面也會被被刷新,因此不要省略type的類型。
?
我這個報錯也算是個個例,不具有普遍性,如果你們不是因為這個原因,那建議你們還是朝第二步的方向去解決。
就寫到這吧。
?
總結
以上是生活随笔為你收集整理的ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt滚动区域QScrollArea
- 下一篇: 通俗易懂的欧拉回路——哥尼斯堡七桥问题