Springmvc中使用ajax获取json数据
服务器端报出:你的主机中的软件中止了一个已建立的连接。
原因唠叨一下:
一开始以为电脑的问题,无缘无故怎么中断连接了呢,再一想或者是数据库的问题,再或者是服务端的问题,重启eclipse,重启电脑,都没有解决。另外断点调试了一下并没有发现controller中存在什么报错的问题。
于是百度了一下,还是可以看到不少关于这个问题的分析的。具体想了一下,说是一个请求还没结束,就关闭了页面(此处关闭也可以理解为跳转),感觉也不至于啊,请求是使用ajax写的。
然后冷静下来,按照以前分析问题的习惯,开始回忆,想想在出错前后我对代码做了哪些修改。最终解决。
ajax代码
function login() {
$.post({
// 请求到哪个地址
url : '',
// user_name=xxx&pwd=xxx
data : $('form').serialize(),
// 发送成功,服务正常接收并返回后执行此方法
success : function(data) {
// result响应内容
if ( == 2) {
alert();
// 登录成功, 跳转
$(location).attr('href', '');
} else if ( == 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 ></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 ></span><br /> <input
type="button" value="提交" οnclick="login()">
具体分析:
由submit变为了button,个人分析如下,由于ajax是异步的,尽管在提交的form表单中使用了return方式,控制表单的提交
但是异步就是异步,导致请求未返回,便要开始action跳转,onsubmit在异步中返回已失去了作用,
便解释了一个请求还未结束,就关闭了页面,即发生跳转,导致这个错误的产生。于此也解释了一下现象
就是当我断点调用执行ajax访问ctroller代码的时候,controller中的代码还没有执行结束,在前端的ajax的error回调方法
就执行了。可见,是由于前端发生了跳转导致ajax中error回调的执行,而不是后端的原因。