$("#submit").click(function () { var boolError = false; CheckForm("#email"); CheckPhone("#phone"); if (boolError == true) { console.log('error'); } else { console.log('here'); // $("#form").submit(); } });
问题是它总是返回console.log(‘here’);
有没有办法等待CheckForm和CheckPhone.来自CheckForm函数的AJAX调用:
$.ajax({ type: "POST",url: "/webservice/user.asmx/CheckForm",data: "{'type':'" + var_type + "','value':'" + var_value + "'}",contentType: "application/json; charset=utf-8",dataType: "json",error: function (XMLHttpRequest,textStatus,errorThrown) { },success: function (data) { var obj = data.d; } });
解决方法
尝试将async设置为false :(请参阅下面的编辑)
$.ajax({ type: "POST",async: false,success: function (data) { var obj = data.d; } });
这将使AJAX调用阻塞,以便浏览器在继续之前等待它完成.当然,我仍然不确定这与在父条件中检查的布尔值有何关系.也许有代码你没有向我们展示……
编辑::::叹气::当我发布这个答案时,我年轻而愚蠢,实际上已经忘记了所有这些.出于历史目的,我保持上述信息不变(因为它似乎帮助了一些人,或者至少他们认为它有),但是要明白这不是一个正确的方法.
使异步调用同步并阻止执行在各方面都是不正确的.不要这样做.相反,构造逻辑以响应异步操作.在这个问题的情况下,调用console.log()应该在AJAX调用的成功(或错误)处理程序中发生,而不是在调用该调用之后的代码中.