Formular Contact 7 - Butonul de Trimitere nu funcționează după cererea Ajax

3 mai 2017, 06:25:52
Vizualizări: 27.2K
Voturi: 0

Folosesc Contact Form 7 cu ajax jquery. Prima parte este pentru ca utilizatorul să introducă numărul vehiculului și email-ul.

Dacă are succes, va încărca formularul Contact Form 7 prin ajax. Când dau click pe trimitere, se redirecționează către o pagină nouă și afișează 0. Am făcut o cercetare pe Google și am găsit funcția wpcf7-submit.

Am încercat să fac o funcție de alertă și răspunde conform așteptărilor. Cum pot să o folosesc cu Contact Form 7 și să trimit detaliile formularului prin email dacă nu există erori în formular?

Cod

form.php

<?php
get_header(); 
// Include toate funcțiile temei    
?>

<form name="season-form" class="form-horizontal" method="post" action="">
  <div class="form-group form-group-lg">
    <label for="carNo" id="label-cust">Număr Înmatriculare Vehicul</label>
    <input type="text" class="form-control" name="vehicle_no" id="vehicle_no" placeholder="BHK1991">
  </div>
  <div class="form-group form-group-lg">
    <label for="email" id="email">Email</label>
    <input type="email" class="form-control" name="email" id="email" placeholder="emailulMeu@exemplu.com">
  </div>
  <button type="submit" class="btn btn-primary" id="submit_payment">Efectuează Plata</button>
</form>
<div id="result"></div>

<?php get_footer(); ?>

function.php

function _myConfirmHandler()
{
    if(isset($_POST['vehicle_no']))
    {
        $vehicle_no = $_POST['vehicle_no'];
        $email = $_POST['email'];

        echo do_shortcode('[cfdb-table form="season parking form_copy" show="your-name,mail,your-platno,your-location" filter="your-platno=' . $vehicle_no . '" headers="your-name=Nume,mail=Email,your-platno=Număr Înmatriculare,your-location=Locație Parcare"]');

        // Afișează Formularul 
        echo do_shortcode('[contact-form-7 id="6959" title="Payment season Form_Post"]');
    }

    wp_die();
}

add_action('wp_ajax_confirmRequest', '_myConfirmHandler');
add_action('wp_ajax_nopriv_confirmRequest', '_myConfirmHandler');

jquery.js

jQuery(document).ready(function($) {
    $('#submit_payment').click(function(e){
        e.preventDefault();
        var str = $("form[name=season-form]").serialize();
        //alert(str);
        $.ajax({
            type: "POST",
            url: '//www.ktmparking.com.my/wp-admin/admin-ajax.php',
            data: str + '&action=confirmRequest' 
        }).done(function(data){
            $("#result").html(data);

            $(".cal").datepicker({
            showOn: "button",
            dateFormat: "dd-mm-yy",
                buttonImage: "http://theonlytutorials.com/demo/x_office_calendar.png",
                buttonImageOnly: true,
                showAnim: 'slideDown',
                duration: 'fast',
                showButtonPanel: true
            });

            $('.wpcf7-submit').click(function(e) {
                e.preventDefault();
                alert('Butonul de trimitere a fost apăsat!');
            }); 

        });
    });    
});

Trebuie să rescriu metoda post în formular și să trimit detaliile prin email dacă are succes?

4
Comentarii

Cred că ai adăugat propriul tău cod jQuery pentru CF7. Am dreptate?

BlueSuiter BlueSuiter
3 mai 2017 08:39:02

te referi la biblioteca jQuery? Nu am adăugat jquery

Amran Amran
3 mai 2017 09:23:03

Nu, nu biblioteca, folosești propriul tău cod pentru trimiterea mailurilor..

BlueSuiter BlueSuiter
3 mai 2017 10:12:21

Nu. Pentru jQuery, folosesc doar codul de mai sus. Pentru trimiterea mailului, vreau să folosesc funcția oferită de Contact Form 7. Din codul anterior pe care l-ai creat, poți trimite formularul?

Amran Amran
3 mai 2017 10:28:43
Toate răspunsurile la întrebare 1
14

Ați încărcat formularul CF-7 folosind ajax, ceea ce înseamnă că scripturile necesare pentru acel formular nu au fost executate. Din această cauză, formularul dumneavoastră nu funcționează așa cum era de așteptat.

Trebuie să re-inițiați scripturile CF-7 pentru formularul respectiv. Iată codul PHP actualizat.

Acum, ajax-ul dumneavoastră va arăta astfel:

<?php

function _myConfirmHandler()
{
    if(isset($_POST['vehicle_no']))
    {
        $vehicle_no = $_POST['vehicle_no'];
        $email = $_POST['email'];

        echo do_shortcode('[cfdb-table form="season parking form_copy" show="your-name,mail,your-platno,your-location" filter="your-platno=' . $vehicle_no . '" headers="your-name=Name,mail=Email,your-platno=Registration No.,your-location=Parking Location"]');

        // Afișează Formularul 
        echo do_shortcode('[contact-form-7 id="6959" title="Payment season Form_Post"]');
    ?>
     <script>
        jQuery('.wpcf7 > form').initForm();
        var urL = jQuery('.wpcf7 > form').attr('action').split('#');
        jQuery('.wpcf7 > form').attr('action', "#" + urL[1]);
    </script>
    <?php
    }

    wp_die();
}

?>

Actualizare: initForm nu mai este disponibil începând cu CF7 5.4

Mulțumim @Chris Pink

3 mai 2017 12:44:39
Comentarii

Mulțumesc pentru ajutor. Nu sunt acum la birou. Voi oferi actualizarea mai târziu. Pot afla ce face scriptul?

Amran Amran
3 mai 2017 13:07:30

Acesta va iniția scriptul CF7 pe formularul tău. Încărcai formularul folosind ajax, motiv pentru care nu se iniția pe acel formular specific. Voi aștepta răspunsul tău. Programare plăcută :)

BlueSuiter BlueSuiter
3 mai 2017 13:09:46

Voi face asta. Unde pot găsi detalii sau documentația despre aceasta?

Amran Amran
3 mai 2017 13:22:01

Ce documentație dorești?

BlueSuiter BlueSuiter
3 mai 2017 13:22:55

În legătură cu scriptul. De exemplu, funcția detaliată pentru 'wpc7InitForm()'

Amran Amran
3 mai 2017 13:40:58

Sper că pe site-ul Contact Form 7.

BlueSuiter BlueSuiter
3 mai 2017 13:45:05

Am actualizat codul cu scriptul. Primește un răspuns, dar afișează doar spinner-ul de încărcare fără a trimite niciun e-mail sau a valida datele.

Amran Amran
3 mai 2017 18:37:56

folosești pe server local sau live?

BlueSuiter BlueSuiter
3 mai 2017 22:40:03

Este un server live

Amran Amran
3 mai 2017 23:18:01

Am făcut câteva actualizări în cod, te rog să le verifici.

BlueSuiter BlueSuiter
4 mai 2017 08:43:13

continuăm această discuție în chat.

Amran Amran
4 mai 2017 09:34:48

Sunt recunoscător pentru acest răspuns pentru că m-a îndreptat în direcția corectă, dar trebuie să menționez că nu a funcționat pentru mine în forma actuală. Am primit o eroare care spunea că $form.wpc7InitForm() nu este o funcție, ceea ce m-a condus la o soluție găsită pe forumurile Wordpress. S-a dovedit că funcția nu este $form.wpc7InitForm(), ci mai degrabă wpc7.initForm($form) ... vezi răspunsul lui @tapitoconnectey aproape de final - https://wordpress.org/support/topic/wpcf7initform-is-not-a-function/

mroncetwice mroncetwice
16 ian. 2018 15:06:34

@mroncetwice răspunsul a fost actualizat conform comentariului tău, sper că va funcționa acum fără nicio eroare. Mulțumesc pentru actualizare. :)

BlueSuiter BlueSuiter
17 ian. 2018 06:24:13

Notă: initForm nu mai este prezent începând cu CF7 5.4

Chris Pink Chris Pink
16 mai 2021 18:33:38
Arată celelalte 9 comentarii