如果使用$ .post()时条件不起作用

时间:2012-06-21 12:00:50

标签: jquery asp.net login

我有一个带OnClientClick和OnClick事件的图像按钮。

        <asp:ImageButton ImageUrl="./../../images/login.gif" Style="margin-right: 153px;"
        runat="server" OnClientClick="return SendLoginData();" OnClick="Login_Click" />

OnClientClick,我调用了一些客户端函数SendLoginData(),其中我使用了$ .post()函数。

    function SendLoginData() {
        var flagLogin = "0";
        if (LoginValidation() != false) {
            $.post(window.location,
                {
                    LOGIN: "LOGIN",
                    UserName: $.trim($('#txtUserNameLogin').val()),
                    Password: $.trim($('#txtPasswordLogin').val())
                },
                function (data) {

                    var d = $(data).find('#<%=lblMessageLogin.ClientID %>');
                    if ($(d).html() == "SUCCESS") {
                        flagLogin = "1";
                    }
                    else {
                        $('#lblErrorMsgLogin').html(d.html());
                    }
                }
            );
        }
        //alert(flagLogin);
        if (flagLogin == "1") {
            return true;
        }
        else {
            return false;
        }
    }

Afer $ .post()当我得到“SUCCESS”的响应时,我想返回true给客户端函数SendLoginData。 这样我的服务器端onClick就可以工作了。

但我面临一个问题。 您可以看到有一个警报被注释(// alert(flagLogin);)。

如果我取消注释警报,那么if(flagLogin ==“1”)条件是否有效。然而,如果我按照评论保留警报,那么(flagLogin ==“1”)是不起作用的。

有人可以解释我如何处理这种情况以及这背后的原因是什么?

2 个答案:

答案 0 :(得分:4)

因为请求是异步的。 AJAX调用不会“等待”请求完成,因此在请求完成之前执行“if”。

换句话说,代码继续执行流程,同时处理POST请求,并且当SendLoginData()函数已经完成时,您的标志会被重视。

您应该在POST请求中的function (data)位中管理登录成功。


顺便说一下:不要依靠JavaScript来验证登录,它可以通过极端轻松篡改。考虑一种激进的方法改变。

答案 1 :(得分:0)

我已使用下面的代码

解决了这种情况
    function SendLoginData() {
        var flagLogin = "0";
        if (LoginValidation() != false) {

            $.post(window.location,
                {
                    LOGIN: "LOGIN",
                    UserName: $.trim($('#txtUserNameLogin').val()),
                    Password: $.trim($('#txtPasswordLogin').val())
                },
                function (data) {

                    var d = $(data).find('#<%=lblMessageLogin.ClientID %>');
                    if ($(d).html() == "SUCCESS") {
                        flagLogin = "1";
                        window.location = window.location + "?HOME=true";
                    }
                    else {
                        $('#lblErrorMsgLogin').html(d.html());
                    }
                }
            );

        }
        if (flagLogin == "1") {
            return true;
        }
        else {
            return false;
        }
    }

在这里,我使用window.location和回调函数中的一些查询字符串来执行我的服务器端代码,它运行正常。