ajax向后台请求数据并成功返回,但不执行success也不执行error
问题描述:
服务器端返回字符串类型的数据正常。前端代码如下:
$('#doc-vld-msg').validator({
submit: function () {
var formValidity = this.isFormValid();
if (formValidity) {
var progress = $.AMUI.progress;
$.ajax({
type: "POST",
url: "save.ashx",
cache: "false",
dataType: "text",
data: {
BicycleID: $("#doc-vld-name-2-1").val(),
University: $("#doc-select-1-1").val(),
Password: $("#doc-vld-age-2-1").val(),
},
beforeSend: function () {
progress.start();
},
success: function (result) {
alert(result);
window.location.href = "index.html";
},
error: function (jqXHR) {
alert("发生错误:" + jqXHR.status);
},
complete: function () {
progress.done();
}
});
}
else { alert("未完成验证!"); }
}
});
先是做一个前台控件的验证,验证通过就发送ajax请求,我在浏览器和后台都看过是OK 200,但就是不执行success,也不执行error,我试了好多办法,发现,在if最后加一个alert()就可以执行success或者error了,代码如下:
$('#doc-vld-msg').validator({
submit: function () {
var formValidity = this.isFormValid();
if (formValidity) {
var progress = $.AMUI.progress;
$.ajax({
type: "POST",
url: "save.ashx",
cache: "false",
dataType: "text",
data: {
BicycleID: $("#doc-vld-name-2-1").val(),
University: $("#doc-select-1-1").val(),
Password: $("#doc-vld-age-2-1").val(),
Random: getRandom(1000)
},
beforeSend: function () {
progress.start();
},
success: function (result) {
alert(result);
window.location.href = "index.html";
},
error: function (jqXHR) {
alert("发生错误:" + jqXHR.status);
},
complete: function () {
progress.done();
}
});
alert("数据已提交,正在查询是否能成功...");//就是添加的这一句
}
else { alert("未完成验证!"); }
}
});
但是问题来了,他是先执行alert("数据已提交,正在查询是否能成功...");再执行success或者error,这是为什么?然后还有为什么我不添加这一句就不执行呢?
大神们,这是什么原因?我是个菜鸟,望大神解答一下。
答
因为ajax异步的,肯定是执行往下执行了,ajax回调都是ajax请求返回后才执行的,所以肯定是晚于alert("数据已提交,正在查询是否能成功...");这句执行
你要先执行回调后再执行后续的代码需要配置为同步ajax
$.ajax({async:false,
//....
答
楼主问题解决了吗?我看代码改成同步也有问题啊
答
用直接写入reponse,
PrintWriter out = resp.getWriter();
out.print(result.getCid());
out.flush();
out.close(); 就可以解决了