我有一个奇怪的奇怪问题,这是我的JS代码
function ValidateUser(username) {
var userExists = "somevalue";
$.ajax({
contentType: 'application/json, charset=utf-8',
type: "POST",
url: "/Controller/Validate",
data: JSON.stringify({ username: username }),
cache: false,
dataType: "json",
success: function (response) {
alert(response);
if (response == true) {
userExists = true;
alert("user exists: " + userExists);
} else {
alert("user exists: " + userExists);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('error');
}
});
return userExists;
}
好吧,动作工作正常并正确验证用户,但函数总是返回“somevalue”.....什么给出?我的预感是它与功能范围有关。但是我该如何解决这个问题呢。
答案 0 :(得分:2)
因为您调用$.ajax
的函数在Ajax调用完成之前返回。
简单的答案是在success
函数中完成您需要做的工作,可以使用立即函数(如现在),也可以将success
设置为现有函数。
您也可以使用jQuery's $.when
function。
答案 1 :(得分:0)
您也可以使用“asynch:false”设置,它会锁定浏览器,在请求处于活动状态时禁用任何操作。这是您的代码更改:
function ValidateUser(username) {
var userExists = "somevalue";
$.ajax({
contentType: 'application/json, charset=utf-8',
type: "POST",
url: "/Controller/Validate",
asynch: false,
data: JSON.stringify({ username: username }),
cache: false,
dataType: "json",
success: function (response) {
alert(response);
if (response == true) {
userExists = true;
alert("user exists: " + userExists);
} else {
alert("user exists: " + userExists);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('error');
}
});
return userExists;
}
您可以在此处获取更多信息:jQuery.ajax()