AJAX"成功"在返回响应之前执行

时间:2014-08-14 18:41:31

标签: javascript jquery asp.net ajax

我希望这只是一个简单的修复,因为我在某个地方有点愚蠢。我正在使用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”处理程序似乎在返回值之前执行。

1 个答案:

答案 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.");
    }
});