Событие успеха jquery, основанное на различных результатах - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблемы с получением того, что мне нужно.У меня есть форма для генерации пароля.Он создает ajax-вызов, который проверяет некоторые поля, а затем имеет две опции:

  • Генерирует пароль;
  • Имеется ошибка (например, пользователь не заполнил пароль любого размера);

Если сценарий является первым, он должен добавить пароль к textarea в форме.Если есть ошибка, он должен вывести notify с ошибкой для пользователя.

Как я могу увидеть, есть ли ошибка или сгенерированный пароль для других действий?Я не могу просто проверить, равен ли результат чему-либо, поскольку сгенерированный пароль будет случайным.Как я могу узнать из PHP, если это успешно или неправильно использовать функции success и error?

Мой JS:

$.validator.setDefaults({
    highlight: function(element) {
      $(element).closest('.form-control').addClass('is-invalid');
      $(element).closest('.form-control').removeClass(
        'is-valid has-feedback').addClass('is-invalid has-feedback');
      $(element).closest('.form-control').find('i.fa').remove();
    },
    unhighlight: function(element) {
      $(element).closest('.form-control').removeClass('is-invalid');
      $(element).closest('.form-control').addClass('is-valid');
      $(element).closest('.form-control').find('i.fa').remove();
    },
    errorElement: 'p',
    errorClass: 'text-danger text-sm',
    errorPlacement: function(error, element) {
      if (element.parent('.input-group').length) {
        error.insertAfter(element.parent());
      } else {
        error.insertAfter(element);
      }
    }
  });

var OpAuthPwdGenerator = function() {
    // Init Sign In Form Validation, for more examples you can check out https://github.com/jzaefferer/jquery-validation
    var initValidationPwdGenerator = function(){
        jQuery('.js-validation-pwd_gen').validate({
            rules: {
                'pwd_size': {
                    required: true,
                    digits: true,
                    min: 6,
                    max: 2048,
                },
                'pwd_quantity':{
                    required: true,
                    digits: true,
                    min: 1,
                    max: 100,
                },
            },
            messages: {
                'pwd_size': {
                    required: 'Please set the password length.',
                    digits: 'Length is a numeric value.',
                    min: 'Password should have at least 6 characters.',
                    max: 'Password could not have more that 2048 characters.',
                },
                'pwd_quantity': {
                    required: 'Please set the password quantities you want.',
                    digits: 'Length is a numeric value.',
                    min: 'You should generate at least one password.',
                    max: 'You can generate at most 100 password at a time.',
                }
            },
            submitHandler: PasswordGenerator
        });
    };

function PasswordGenerator()
     {
        var data = $("#pwd_gen_form").serialize();
        $.ajax({ url: '../inc/call.php',
            data: {
                dados: JSON.stringify(data),
                caller: 'PasswordGenerator',
            },
            type: 'POST',
            beforeSend: function(){
                $("#gen_pwd_btn").html('<i class="fa fa-cog fa-spin"></i>');
                $("#gen_pwd_btn").attr("disabled", true);
            },
            success: function(output) {
                if(output == "OK"){

                }else{
                $("#gen_pwd_btn").html('Generate');
                $("#gen_pwd_btn").attr("disabled", false);
                        $.notify({
                            // options
                            title: 'Error',
                            message: output,
                        },{
                        // settings
                        element: 'body',
                        position: null,
                        type: "danger",
                        allow_dismiss: true,
                        newest_on_top: true,
                        placement: {
                            from: "top",
                            align: "right"
                        },
                        offset: 20,
                        spacing: 10,
                        z_index: 9999,
                        delay: 10000,
                        timer: 1000,
                        url_target: '_blank',
                        mouse_over: null,
                        animate: {
                            enter: 'animated fadeInDown',
                            exit: 'animated fadeOutUp'
                        },
                        onShow: null,
                        onShown: null,
                        onClose: null,
                        onClosed: null,
                        icon_type: 'class',
                        template: '<div data-notify="container" class="col-xs-11 col-sm-3 alert alert-{0}" role="alert">' +
                            '<button type="button" aria-hidden="true" class="close" data-notify="dismiss">×</button>' +
                            '<span data-notify="icon"></span> ' +

                            '<span data-notify="title"><strong>{1}</strong></span> ' +
                            '<span data-notify="message">{2}</span>' +
                            '<div class="progress" data-notify="progressbar">' +
                                '<div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>' +
                            '</div>' +
                            '<a href="{3}" target="{4}" data-notify="url"></a>' +
                        '</div>' 
                    });     
                }  

            }
});
     };

    return {
        init: function () {
            // Init Sign In Form Validation
            initValidationPwdGenerator();
        }
    };
}();

// Initialize when page loads
jQuery(function(){ OpAuthPwdGenerator.init(); });

Мой PHP:

function PasswordGenerator($mysqli){
    if(isset($_POST['dados'])){
        $dados1 = json_decode($_POST['dados'], true);
        parse_str($dados1, $dados);
        if(!isset($dados['pwd_size'])){
            $errors [] = "Please insert the length of password.";
        }
        if(!isset($dados['pwd_quantity'])){
            $errors [] = "Please insert the password quantity.";
        }
        if((!isset($dados['pwd_numbers'])) AND (!isset($dados['pwd_lowercase'])) AND (!isset($dados['pwd_uppercase'])) AND (!isset($dados['pwd_symbols']))){
            $errors [] = "You can't create an empty password...";
        }
        $length = validar($mysqli, $dados['pwd_size']);
        $pwdnr = validar($mysqli, $dados['pwd_quantity']);
        if(empty($errors)){
            $sets = array();
            if((isset($dados['pwd_lowercase'])) AND (isset($dados['pwd_similar']))){
                $sets[] = "abcdefghjkmnpqrstuvwxyz";
            }elseif((isset($dados['pwd_lowercase'])) AND (!isset($dados['pwd_similar']))){
                $sets[] = "abcdefghijklmnopqrstuvwxyz";
            }
            if((isset($dados['pwd_uppercase'])) AND (isset($dados['pwd_similar']))){
                $sets[] = "ABCDEFGHJKMNPQRSTUVWXYZ";
            }elseif((isset($dados['pwd_uppercase'])) AND (!isset($dados['pwd_similar']))){
                $sets[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            }
            if((isset($dados['pwd_numbers'])) AND (isset($dados['pwd_similar']))){
                $sets[] = "23456789";
            }elseif((isset($dados['pwd_numbers'])) AND (!isset($dados['pwd_similar']))){
                $sets[] = "1234567890";
            }
            if(isset($dados['pwd_symbols'])){
                $sets[] = "!{[]}@-+*_.?";
            }
            $all = '';
            $password = '';
            foreach($sets as $set){
                $password .= $set[array_rand(str_split($set))];
                $all .= $set;
            }
            $all = str_split($all);
            for($i = 0; $i < $length - count($sets); $i++){
                $password .= $all[array_rand($all)];
            }
            $password = str_shuffle($password);
            return $password;

        }else{
            foreach($errors as $value){
                echo "<p style='margin: 0 0;'>".$value."</p>";
            }           
        }
    }else{
        echo "Something wrong happened. Please try again later.";
    }
}
...