fer*_*vak 8 ajax jquery return
$("#submit").click(function () {
var boolError = false;
CheckForm("#email");
CheckPhone("#phone");
if (boolError == true) {
console.log('error');
} else {
console.log('here');
// $("#form").submit();
}
});
Run Code Online (Sandbox Code Playgroud)
问题是它总是返回 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;
}
});
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 17
尝试设置(见下面编辑)async
为false:
$.ajax({
type: "POST",
async: false,
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;
}
});
Run Code Online (Sandbox Code Playgroud)
这将使AJAX调用阻塞,以便浏览器在继续之前等待它完成.当然,我仍然不确定这与在父条件中检查的布尔值有何关系.也许有代码你没有向我们展示......
编辑 :::叹气:::当我发布这个答案时,我年轻而愚蠢,实际上已经忘记了所有这些.我保留上述信息不会出于历史目的(因为它似乎帮助了一些人,或者至少他们认为它有),但是要明白这不是一个正确的方法.
使异步调用同步并阻止执行在各方面都是不正确的.不要这样做.相反,构造逻辑以响应异步操作.在这个问题的情况下,调用console.log()
应该发生在AJAX调用的成功(或错误)处理程序中,而不是在调用该调用之后的代码中.
你必须在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) {
console.log('error');
},
success: function (data) {
console.log('here');
}
});
Run Code Online (Sandbox Code Playgroud)
使用AJAX需要非线性编程 - 回调比比皆是.
您可以在ajax调用中设置选项,使其不是异步(即jQuery将等待它完成),但这将使您的应用程序/网站不能正常运行.