1 function checkMobile(){ 2 //自动提示 3 var fdMobile=document.getElementsByName("fdMobile")[0].value; 4 var flag = false; 5 var url = '<c:url value="xxx.do?method=getFdMoblie"/>'; 6 $.ajax({ 7 type: 'get', 8 url: url, 9 data: {keyword: fdMobile}, 10 dataType: "json", 11 async: false,//若无此,flag=false,同步请求,在后台无返回前,不执行return操作 12 success: function (text) { 13 14 if(text['key']==1){ 16 layer.tips('手机号有误,已存在!!', '#_xform_fdMobile', { 17 tips: [1, '#E65600'], 18 time: 3000 19 }); 20 flag=true; 21 22 } 23 24 } 25 26 }); 27 28 return flag; 29 30 31 }
调用后台方法执行,返回ajax的回调函数,执行if验证,此时flag为true,若无11行代码,则teturn时flag仍为flase
为解决这一问题,加入第11行代码后,return为true
对async: false理解
async. 默认是true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程即先会执行return flag=false再执行success。
若要将其设置为false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
愿所有相遇都能恰逢其时