日期:2014-05-17  浏览次数:20680 次

js中后一个判断居然在前一个判断结束前执行了
页面上有个保存按钮,点击后执行faultSave;

var faultSave = function(role) {
var canEdit = document.getElementById("canEdit");
if ("true" != canEdit.value) {
var faultForm = document.getElementById("faultForm");
faultForm.description.innerHTML = "";
faultForm.analyse.value = "";
faultForm.opinion.value = "";
}
canEdit.value = "false";
if (!empty(role)) {
if (confirm("点击“确定”保存")) {
var faultForm = document.getElementById("faultForm");
faultForm.action = "../todo/operation.do?method=faultProcess&token=save";
faultForm.submit();
window.close();
}
}
};


var empty = function(role) {
var isEmpty = false;
var faultForm = document.getElementById("faultForm");
$.ajax({
type: "POST",
url: "../required/operation.do?method=getRequiredByRole",
data: { role : role },
dataType: "json",
success: function(data, textStatus) {
var size = data.length;
if (size > 0) {
//
for(var i = 0; i<size ; i++){
if(data[i].requiredName == "submit_remark"){
isEmpty = true;
alert("请输入故障描述内容!");
return isEmpty;

}
}
}
}
});
return isEmpty;
};
在判断!empty(role)时,我在empty(role)方法中用了ajax,还没等ajax返回,就执行了下一个if中的confirm("点击“确定”保存"),弹出个对话框,我点了取消之后,才执行alert("请输入故障描述内容!")弹出一个对话框。感到很费解,哪个大神帮忙看一下哪里有问题。
JavaScript Ajax 对话框

------解决方案--------------------
ajax是异步处理的,也就是说提交给后台服务器后,js还是继续执行的,这时刚好调用confirm方法,弹出了对话框,在你点击取消按钮时,后台服务器有响应了,调用回调函数success,也就是你看到的alert框内容

可以把confirm后面的代码,移动到回调函数success中执行