ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
一、問(wèn)題描述
今天在django中調(diào)用ajax時(shí),報(bào)錯(cuò)了:
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] 你的主機(jī)中的軟件中止了一個(gè)已建立的連接。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("服務(wù)器錯(cuò)誤!郵件發(fā)送失敗!");},success: function (data) {if (null != data && "" != data) {if(data.status == "1"){alert("郵件發(fā)送成功,請(qǐng)查收!");}else{alert("郵件發(fā)送錯(cuò)誤!")}}} });二、處理
平時(shí)這么寫(xiě)也沒(méi)報(bào)錯(cuò),今天這樣寫(xiě)怎么就報(bào)錯(cuò)了,我就納了悶了。網(wǎng)上查了半天,說(shuō)是要把異步改成同步,也就是把a(bǔ)jax中的 async:true 改成 async:false。
改了以后發(fā)現(xiàn)確實(shí)不報(bào)錯(cuò)了,但又出現(xiàn)一個(gè)比較嚴(yán)重的問(wèn)題是,使用同步后因?yàn)閍jax要等后端返回?cái)?shù)據(jù),而我后端因?yàn)橐{(diào)用發(fā)送郵件的函數(shù),處理的比較慢,因此前端就一直處于假死的狀態(tài)。因此這樣改對(duì)于我來(lái)說(shuō)還是不能接受的。
然后又查了很多資料,說(shuō)是使用$.Deferred(); 以及 async/await?異步請(qǐng)求等待返回?cái)?shù)據(jù)。但是我嘗試后,發(fā)現(xiàn)一中的問(wèn)題又雙叒出現(xiàn)了!又給我報(bào)錯(cuò)了。
?
三、轉(zhuǎn)機(jī)
然后感謝這篇文章:https://www.bbsmax.com/A/ZOJPmXOe5v/
突然明白為什么會(huì)報(bào)這個(gè)錯(cuò)了,是因?yàn)槲揖W(wǎng)頁(yè)刷新導(dǎo)致ajax和服務(wù)器的連接斷開(kāi)了!而為什么我的網(wǎng)頁(yè)會(huì)刷新呢?
?
因?yàn)槲野堰@個(gè)ajax請(qǐng)求綁在了一個(gè)超鏈接a標(biāo)簽上,
<a href="{% url 'resume:download' %}" class="btn-rounded-white" onclick="disp_prompt()">下載我的簡(jiǎn)歷</a>由于異步的原因,ajax在等待后端返回?cái)?shù)據(jù)的時(shí)候,瀏覽器會(huì)繼續(xù)往下執(zhí)行跳轉(zhuǎn)a的超鏈接的操作,然后就會(huì)導(dǎo)致ajax與后端的連接斷開(kāi)!于是把a(bǔ)標(biāo)簽改成button標(biāo)簽,問(wèn)題解決!!
?
另外,參考:https://blog.csdn.net/BobYuan888/article/details/107871596
button的type有三種:button、reset、submit,如果沒(méi)寫(xiě)type,默認(rèn)type不是你以為的“button”,而是“submit”,“submit”,“submit”!!!頁(yè)面也會(huì)被被刷新,因此不要省略type的類(lèi)型。
?
我這個(gè)報(bào)錯(cuò)也算是個(gè)個(gè)例,不具有普遍性,如果你們不是因?yàn)檫@個(gè)原因,那建議你們還是朝第二步的方向去解決。
就寫(xiě)到這吧。
?
總結(jié)
以上是生活随笔為你收集整理的ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt滚动区域QScrollArea
- 下一篇: 通俗易懂的欧拉回路——哥尼斯堡七桥问题