我希望这只是一个简单的修复,因为我在某个地方有点愚蠢。我正在使用AJAX执行ASP.NET MVC登录。有一个“success”处理程序,它向调用函数返回一个“true”值,然后加载主页。
问题是“成功”处理程序在返回任何值之前执行 - 这意味着没有任何反应,因为该值不是“SUCCESS”。我可以通过查看Firebug中的请求来确认这一点,返回的值是SUCCESS但没有任何反应。如果我在函数的末尾应用断点然后继续执行它就可以了。
我不知道问题是什么,我非常感谢帮助或解释我做错了什么。
谢谢!
我的JS功能:
function LogIn(UserName, Password) {
var Cont = true;
var ErrorString = "";
if (UserName == null || UserName == "") {
Cont = false;
ErrorString += "Username is Required.";
}
if (Password == null || Password == "") {
Cont = false;
ErrorString += "Password is Required.";
}
var result = false;
if (Cont) {
var LogInUrl = "/AJAX/LogIn?UserName=" + UserName + "&Password=" + Password;
$.ajax({
url: LogInUrl,
type:"GET",
success: function( data ){
if (data == "SUCCESS") {
result = true;
}
}
})
}
return result;
}
UPDATE:调用LogIn函数的函数:
$('#FormLogin').submit(function (e) {
e.preventDefault();
var UserName = $("#TxtLoginUsername").val();
var Password = $("#TxtLoginPassword").val();
var IsLoggedIn = LogIn(UserName, Password);
if (IsLoggedIn) {
window.location.assign("/");
} else {
$('#LoginErrorContainer').show();
$('#LoginErrorContainer .error-text').html("There was a problem logging you in. Please try again.");
}
})
正如我所说,该函数完成了它的工作并将我登录,但“success”处理程序似乎在返回值之前执行。
答案 0 :(得分:2)
将您的ajax调用更改为以下内容:
$.ajax({
url: LogInUrl,
type:"GET",
success: function( data ){
if (data == "SUCCESS") {
window.location.assign("/");
} else {
$('#LoginErrorContainer').show();
$('#LoginErrorContainer .error-text').html("There was a problem logging you in. Please try again.");
}
}
});
从result
返回LogIn
毫无意义,它总是错误的。您需要将处理返回值的代码放入回调。
另一种选择,如果你不喜欢你的LogIn
函数与DOM操作紧密耦合的想法是从你的ajax调用中返回promise。所以在LogIn
结束时,你会做这样的事情:
return $.ajax({
url: LogInUrl,
type:"GET"
}
});
然后当你打电话时,你会做这样的事情:
LogIn(UserName, Password).then(function(data) {
if (data == "SUCCESS") {
window.location.assign("/");
} else {
$('#LoginErrorContainer').show();
$('#LoginErrorContainer .error-text').html("There was a problem logging you in. Please try again.");
}
});