ajax 为什么里面最后返回的值都是最开始赋值的true

; (function ($) {
$(document).ready(function () {

    $("form").submit(function () {
        var flag = true;
        //验证账号密码

        //获取用户信息框
        var $account = $("input[name=account]");
        var $password = $("input[name=password]");

        var userData = {
            account: $account[0].value,
            password: $password[0].value
        };
        //清空验证信息
        if (userData.account == "") {
            flag = false;
            swal({
                title: "提示",
                text: "请输入账号"
            });
        }
        if (userData.password == "") {
            flag = false;
            swal({
                title: "提示",
                text: "密码不能为空"
            });
        }
        if (userData.password != "" && userData.account != "") {
            $.ajax({
                type: "POST",
                url: "/api/User/Login",
                data: { "account": userData.account, "psd": userData.password },
                dataType: "json",
                error: function (data) {
                    flag = false;
                    alert("登录错误,请于管理员联系");
                },
                success: function (data) {
                    if (data.code == 4) {
                        flag = false;
                        alert(data.errorMsg);
                    }
                    if (data.code == 2) {
                        flag = false;
                        alert(data.errorMsg);
                    }
                }
            });
        }
aler(flag);   //这里不管ajax里面怎么判断,这里都是true
return flag;
    });
});

})(jQuery);

加上这个 async: false 在试试

那你把 一开始的定义置为false . var flag = false; 最后还是false?

最好用chrome调试一下js,看每个分支执行的情况就知道了。

ajax是异步的 所以在你打印flag的时候ajax还没有执行

我的问题和你的一样,我刚刚解决

1:首先在你的ajax里面加上async: false,设置成同步请求
2:在你的这个方法里面再设一个 var flag = true,
if (userData.password != "" && userData.account != "")
var flag =true;
3:最后在这个If方法最后 return flag,flag的值就改变了