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

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" οnsubmit="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="提交" οnclick="login()">


具体分析:

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


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值