Попытка добавить Recaptcha v3 в уже работающую ajax форму с SweetAlert (swal) - PullRequest
0 голосов
/ 19 марта 2020

У меня есть эта довольно простая форма, которая в последнее время засыпалась спамом, и хочу заставить ее использовать Recaptcha 3.

Итак, вот форма:

<div class="col-md-6 mt50">
<form class="contact-us-form" id="contactForm" name="myemailform" action="contact_form_submit.php" method="post">

    <input type="text" name="name" value="" placeholder="Εισάγετε το όνομά σας.." required=""/>
    <input type="email" name="email" value="" placeholder="Εισάγετε το email σας.." required=""/>
    <textarea name="message" placeholder="Γράψτε μας το μήνυμά σας.." required="" rows="5"></textarea>

    <div class="clearfix "></div>

    <button type="submit" class="sr-btn sr-primary hvr-sweep-to-right pull-right mb20" data-loading-text="Στέλνω..."><span class="icon pe-7s-paper-plane"></span>Αποστολή μηνύματος</button>
</form> <!-- end form -->
<!-- form Validation script -->
<script language="JavaScript">
    // Code for validating the form
    var frmvalidator  = new Validator("myemailform");
    frmvalidator.addValidation("name","req","Παρακαλώ συμπληρώστε το όνομά σας"); 
    frmvalidator.addValidation("email","req","Παρακαλώ συμπληρώστε το email σας"); 
    frmvalidator.addValidation("email","email","Παρακαλώ συμπληρώστε μία έγκυρη διεύθυνση email"); 
</script>
<!-- End of form Validation script -->

После отправки формы я вызываю следующий сценарий:

<!--Submit (with recaptcha)-->
<script>
$('#contactForm').submit(function(event) {
    event.preventDefault();
    var email = $('#email').val();

    grecaptcha.ready(function() {
        grecaptcha.execute('RECAPTCHA_PUBLIC_KEY', {action: 'contact_form'}).then(function(token) {
            $('#contactForm').prepend('<input type="hidden" name="token" value="' + token + '">');
            $('#contactForm').prepend('<input type="hidden" name="action" value="contact_form">');
            $('#contactForm').unbind('submit').submit();
        });;
    });
});
</script>
<!--End of submit (with recaptcha)-->

contact_form_submit. php работает и отправляет электронное письмо, если оценка ReCaptcha выше 0,5, как и должно быть, но раньше я отправлял электронное письмо используя ajax и отобразите всплывающее окно с сладкой ласточкой.

Это сделано в js, который не был сделан мной, и в части, которая делает это:

var a = {
    success: function () {
        s("#contactForm").clearForm(), swal("Ευχαριστούμε!", "Θα επικοινωνήσουμε μαζί σας άμεσα. Επίσης θα σας ενημερώσουμε όταν θα έχουμε νέα για την σελίδα μας!", "success")
    }
};
s("#contactForm").ajaxForm(a);

Теперь, когда У меня есть event.preventDefault (); Он переопределяет часть ajax и перенаправляет отправителя в contact_form_submit. php. Конечно, это не работает должным образом. Письмо отправляется и отправляется, ответ recaptcha перехватывается и проверяется должным образом ... Однако я не хочу перенаправлять на страницу contact_form_submit. php. Я хочу, чтобы кнопка submit создавала всплывающие окна swal, к которым он привык.

Есть ли способ изменить сценарий submit, чтобы он выполнял все предварительные требования recaptcha и по-прежнему вызывал swal, когда $ ( '#contactForm'). unbind ('submit'). submit (); срабатывает?

...