简体   繁体   中英

Show hidden div after login error: JQuery and AJAX

I'm using Jquery AJAX to catch login error, but when i submit a bad login i can't see the div loginError

i searched on http://api.jquery.com

i used this example http://hayageek.com/jquery-ajax-form-submit

Here is my js:

$().ready(function() {
    $("#loginForm").validate({
        rules: {
            email: {
                required: true
            },
            password: {
                required: true,
                minlength: 6,
                maxlength: 20
            }
        },
        messages: {
            email: {
                required: "Please provide an email"
            },
            password: {
                required: "Please provide a password",
                minlength: "Your password must be at least 6 characters long",
                maxlength: "Your password must be at most 20 characters long"
            }
        }
    });

    $("#loginForm").submit(function(e)
    {
        var postData = $(this).serializeArray();
        var formURL = $(this).attr("action");
        $.ajax( {
            url : formURL,
            type: "POST",
            data : postData,
            error: function(jqXHR, textStatus, errorThrown) {
                $("#loginError").show();
            }
        });
        e.preventDefault();
    });

When i remove the e.preventdefault(); i can see briefly this div but my page reload and the div disappear !

And Here is my form:

<form class="cmxform form-signin" id="loginForm" method="POST" action="">
            <fieldset>
                <div class="login-wrap">
                    <h2 class="form-signin-heading"><?php echo lang('login.title')?></h2>
                    <div id="loginError" class="alert alert-warning" hidden="hidden">
                        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                        <strong>Oh snap!</strong> <?php echo lang('login.error')?>
                    </div>
                    <div class="form-group ">
                        <label class="control-label" for="femail">Email:</label>
                        <input class="form-control" type="email" id="femail" name="email" placeholder="<?php echo lang('login.email') ?>" autofocus required>
                    </div>
                    <div class="form-group ">
                        <label class="control-label" for="fpassword">Password:</label>
                        <input class="form-control" type="password" id="fpassword" name="password" placeholder="<?php echo lang('login.password') ?>" required>
                    </div>
                    <label class="control-label checkbox" for="frememberme">
                        <input type="checkbox" id="frememberme" name="rememberme" value="rememberme"><?php echo lang('login.rememberme')?>
                        <span class="pull-right"> <a href="forget"><?php echo lang('login.forget') ?></a></span>
                    </label>
                    <button class="btn btn-lg btn-block btn-login" type="submit"><?php echo lang('login.login')?></button>
                    <a href="register"><button type="button" class="btn btn-lg btn-block btn-register"><?php echo lang('login.register')?></button></a>
                    <div class="login-social-link">
                        <p><?php echo lang('login.joinus') ?></p>
                        <a href="index" class="facebook">
                        <i class="icon-facebook"></i>Facebook</a>
                        <a href="index" class="twitter">
                        <i class="icon-twitter"></i>Twitter</a>
                    </div>
                </div>
            </fieldset>
        </form>

maybe it come from my CodeIgniter code.

Thank's in advance !

try something like this

    $("#loginForm").submit(function(e)
    {
        e.preventDefault();
        var postData = $(this).serializeArray();
        var formURL = $(this).attr("action");
        $.ajax( {
            url : formURL,
            type: "POST",
            data : postData,
            error: function(jqXHR, textStatus, errorThrown) {
                $("#loginError").show();
            }
        });
    });

Try this:

$("#loginForm").submit(function (e) {
    var postData = $(this).serializeArray();
    var formURL = $(this).attr("action");
    $.ajax({
        url: formURL,
        type: "POST",
        data: postData,
        success: function (response) {
            if (response) {
                //do stuff if login is correct
            } else {
                $("#loginError").show();
            }

        },
        error: function (jqXHR, textStatus, errorThrown) {
            //$("#loginError").show();
        }
    });
    e.preventDefault();
});  

Note: Get the response from server side after database operation. and make changes in IF/ELSE condition as per your requirement

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM