在使用easyui的时候,被js的执行顺序搞懵了,仔细调了一下,原理还没有搞太懂,但是执行的顺序大体弄懂了。
示例代码:
function main () {
var a1 = " "; var a2 = " ";
if ( a ( a1, a2 ) ) {
b( b1, b2 );
}
}
function a ( args0, args1 ) {
//业务处理
var flag = true;
$.messager.confirm( "title ", "msg",function(r) {
if ( r ) {
$.ajax({
url : url,
type : 'post',
data: data,
success : function(data) {
if (re.success) {
flag = true;
} else {
flag = false;
}
}
});
}
}
return flag;
}
function b ( args0, args1 ) {
//业务处理
$.ajax({
url : url,
type : 'post',
data: data,
success : function(data) {
var re = JSON.parse(data);
if (re.success) {
alert(re.msg);
}
}
});
}
以上就是大体的代码,按照js顺序执行的逻辑应该是调用main函数,然后进行判断执行完函数a的返回结果以后,根据结果判断是否执行函数b。但是,实际的情况是:调用main函数时,先执b,然后才弹出对话框提示是否执行 a函数的ajax。 在运行时用alert() 弹出执行顺序时,调用main函数时,执行 a ,直接返回true,接着执行b函数,然后在执行a的对话框那个ajax。
这样,显然是没有按照所需要的来进行执行,根据逻辑修改代码,把函数a的flag默认值改为false,并在a函数的ajax中的re.success 判断中加上函数b。
修改后的执行顺序是 main --->a -------(成功) ------>b -------->结束
+--------(失败)------->结束