我有这样的方法:
var isNameUnique = false;
function ValidateName() {
var url = "/SomeRules/CheckIfNameExists/";
var request = $.ajax({
url: url,
method: "GET",
data: { sName: name},
dataType: "JSON"
});
request.done(function (result) {
if (result.doesNameExists) {
alert("Name Already Exists!");
console.log("Name Already Exists!");
}
else {
isNameUnique = true;
console.log("Name is unique!");
}
});
request.fail(function (jqXHR, textStatus) {
console.log(textStatus);
alert("Request failed.");
});
console.log("Exiting ValidateName()");
}
这就是这样称呼的:
function CreateNewUser() {
ValidateName();
console.log(isNameUnique);
if(isNameUnique){
// do stuff
}
}
当我运行应用程序时,我按顺序在控制台中有这些:
当它打印第三个控制台时,我希望'isNameUnique'设置为true。 但那并没有发生! 我做错了什么?
提前致谢。
答案 0 :(得分:0)
默认情况下,每个Ajax请求都是异步的,意味着Ajax调用旁边的代码不会等待Ajax调用的完成。 所以你需要做的是,使你的Ajax调用同步,以便下一行代码只在完成ajax调用后执行。
要使ajax调用同步,请在ajax设置中添加以下选项:
async : false
有关详细信息,请查看this文档并阅读有关异步设置的信息。
答案 1 :(得分:0)
当您开始使用异步时会发生这种情况。您的变量isNameUnique
会在您拨打console.log(isNameUnique);
后很长时间内分配值。解决这个问题的最好方法是让函数ValidateName
在其上返回一个promise和chain。