你的主机中的软件中止了一个已建立的连接

Springmvc中使用ajax获取json数据


服务器端报出:你的主机中的软件中止了一个已建立的连接。

原因唠叨一下:

一开始以为电脑的问题,无缘无故怎么中断连接了呢,再一想或者是数据库的问题,再或者是服务端的问题,重启eclipse,重启电脑,都没有解决。另外断点调试了一下并没有发现controller中存在什么报错的问题。

于是百度了一下,还是可以看到不少关于这个问题的分析的。具体想了一下,说是一个请求还没结束,就关闭了页面(此处关闭也可以理解为跳转),感觉也不至于啊,请求是使用ajax写的。


然后冷静下来,按照以前分析问题的习惯,开始回忆,想想在出错前后我对代码做了哪些修改。最终解决。

ajax代码

function login() {
$.post({
//  请求到哪个地址
url : 'login.do',
// user_name=xxx&pwd=xxx
data : $('form').serialize(),
// 发送成功,服务正常接收并返回后执行此方法
success : function(data) {
// result响应内容
if (data.resultCode == 2) {
alert(data.result.realName);
// 登录成功, 跳转
$(location).attr('href', 'home.html');
} else if (data.resultCode == 1) {
alert("用户名或密码存在问题")
 return false;
} else {
alert("验证码错误")
 return false;

},
// 发送失败,运行出错执行此方法
error : function(error) {
// error错误描述信息
alert("error")

                               return false;
}
})

}

原来的代码:

<form action="#" method="post" onsubmit="return login()">
电话号码:<input type="text" name="tel" /> <br /> 密码: <input
type="password" name="pwd" /><br /> 验证码:<input type="text"
name="valiCode" /><span id="vali_code"></span><br /> <input
type="submit" value="提交" >

</form>

修改后的代码:
<form >
电话号码:<input type="text" name="tel" /> <br /> 密码: <input
type="password" name="pwd" /><br /> 验证码:<input type="text"
name="valiCode" /><span id="vali_code"></span><br /> <input
type="button" value="提交" onclick="login()">


具体分析:

由submit变为了button,个人分析如下,由于ajax是异步的,尽管在提交的form表单中使用了return方式,控制表单的提交
但是异步就是异步,导致请求未返回,便要开始action跳转,onsubmit在异步中返回已失去了作用,
便解释了一个请求还未结束,就关闭了页面,即发生跳转,导致这个错误的产生。于此也解释了一下现象
就是当我断点调用执行ajax访问ctroller代码的时候,controller中的代码还没有执行结束,在前端的ajax的error回调方法
就执行了。可见,是由于前端发生了跳转导致ajax中error回调的执行,而不是后端的原因。

猜你喜欢

转载自blog.csdn.net/weixin_37380784/article/details/80735166