Ajax回调函数中return不生效问题
-
错误代码 如下方代码: 函数checkExistOfUserId返回的不是true或false,而是undefined,导致外部其他函数无法判断此函数是否执行成功
function checkExistOfUserId(userId) { $.ajax({ url:"/commonServlet", async:true, //默认为true,异步加载 data:{ "userid":userId}, type:"GET", dataType:"json", success:function(data){ if(data.message == "true"){ return false //不生效 }else{ return true //不生效 } }, error:function(){ alert("检测接口调用接口异常!") return false //不生效 } }) }
-
修改后代码(注释地方为改动地方)
function checkExistOfUserId(userId) { var flag = false //局部变量,用于接收ajax回调函数中传递的值 $.ajax({ url:"/commonServlet", async:false, //默认为true,表示异步加载。改为false //因为如果仍然异步加载的话,局部变量flag的值可能并没有被ajax回调函数赋值,主函数就已经拿到flag的初始值false返回了,便会导致无论回调函数中怎么修改,主函数都返回false(简单点说:返回flag 和 flag被赋值必须有先后顺序,如果各走各的,那就很难保证拿到赋值后的flag来返回) data:{ "userid":userId}, type:"GET", dataType:"json", success:function(data){ if(data.message == "true"){ flag = false //改为给局部变量赋值 }else{ flag = true //改为给局部变量赋值 } }, error:function(){ alert("检测接口调用接口异常!") flag = false //改为给局部变量赋值 } }) return flag //方法结束之前,返回该局部变量 }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
女生到底选择前端还是测试?