Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Ajax] Problema form ajax in Wordpress

    Salve a tutti...
    Ho inserito un form AJAX all'interno di una pagina del sito su cui sto lavorando.
    La piattaforma di sviluppo è Wordpress. Ho deciso per questo script perchè ha degli effetti sul controllo campi e sulla processazione davvero carini.

    Ebbene, funziona tutto: l'unico problema è che non viene inviata la mail.
    Ho come il sospetto che mi sfugga qualcosa sulla ACTION del form, in relazione a wordpress.
    Ecco il codice dello script:
    codice:
    <script type="text/javascript">
        <![CDATA[//><!--
        $(document).ready(function() {
        $('form#contact-us').submit(function() {
             $('form#contact-us .error').remove();
             var hasError = false;
             $('.requiredField').each(function() {
                 if($.trim($(this).val()) == '') {
                     var labelText = $(this).prev('label').text();
                     $(this).addClass('inputError');
                     $(this).prev('label').addClass("request");
                     hasError = true;
                  }else{
                      $(this).prev('label').removeClass("request");
                  }
                  if($(this).hasClass('email')) {
                      if($.trim($(this).val()) == '') {
                          $(this).prev('label').addClass("request");
                      }else{
                          $(this).prev('label').removeClass("request");
                      }
                      var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
                      if(!emailReg.test($.trim($(this).val()))) {
                          $(this).prev('label').addClass("request");
                          var labelText = $(this).prev('label').text();
                          $(this).addClass('inputError');
                          hasError = true;
                      }
                  }
             });
             if(!hasError) {
                 var formInput = $(this).serialize();
                 $.post($(this).attr('action'),formInput, function(data){
                 $('.submit').fadeOut('slow', function() {
                     // Animation complete.
                 });
                 $('form#contact-us').delay(800).fadeOut("slow", function() {
                 if(template_lang == "it-IT"){
                     $(this).before('<div class="thanks">
    
    Messaggio inviato. Grazie.</p></div>');
                 }else{
                     $(this).before('<div class="thanks">
    
    Message sent. Thank you.</p></div>');
                 }
             });
         });
         }
         return false;
         });
    });
    //-->!]]>
    </script>
    Mi scuso per l'indentatura...
    Cosa devo aggiungere per far processare tutto e mandare la mail?
    Se dovesse servire, ecco anche il codice PHP per l'invio mail.
    (anche quì c'è il controllo degli errori, non so se toglierlo, dato che lo fa jquery)
    codice:
    <?php
    error_reporting(E_ALL ^ E_NOTICE); // hide all basic notices from PHP
    //If the form is submitted
    if (isset($_POST['submitted'])) {
        // require a name from user
        if (trim($_POST['contactName']) === '') {
            $nameError = 'Forgot your name!';
            $hasError = true;
        } else {
            $name = trim($_POST['contactName']);
        }
        // need valid email
        if (trim($_POST['email']) === '') {
            $emailError = 'Forgot to enter in your e-mail address.';
            $hasError = true;
        } else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i",    trim($_POST['email']))) {
            $emailError = 'You entered an invalid email address.';
            $hasError = true;
        } else {
            $email = trim($_POST['email']);
        }
        // we need at least some content
        if (trim($_POST['comments']) === '') {
            $commentError = 'You forgot to enter a message!';
            $hasError = true;
        } else {
            if (function_exists('stripslashes')) {
                $comments = stripslashes(trim($_POST['comments']));
            } else {
                $comments = trim($_POST['comments']);
            }
        }
        // upon no failure errors let's email now!
        if (!isset($hasError)) {
            $emailTo = 'areaweb@faan.it';
            $subject = 'Submitted message from ' . $name;
            $sendCopy = trim($_POST['sendCopy']);
            $body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
            $headers = 'From: ' . ' <' . $emailTo . '>' . "\r\n" . 'Reply-To: ' . $email;
            mail($emailTo, $subject, $body, $headers);
            // set our boolean completion value to TRUE
            $emailSent = true;
        }
    }
    ?>
    Dimenticavo...
    Ecco il form. La sction dovrebbe portare alla pagista stessa!
    codice:
    <form id="contact-us" action="<?php echo get_template_directory_uri(); ?>" method="post">
    Grazie anticipatamente e scusatemi per il poema.
    :-)

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    - Hai verificato con assoluta certezza che la pagina php per l'invio funzioni?
    - Hai verificato che passi i dati corretti (con un echo nella pagina invio)?
    - Hai controlla la console di firefox?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3

    penso di si...

    Andrea penso di si...
    Vedo tutti i jquery e funzionano correttamente, il FORM senza lo script ajax funziona bene, l'ho usato in altri siti, perchè la parte PHP è molto comune in wordpress.

    Ma tu come lo vedi il discorso action - processazione - submit?
    Ti sembra corretta come cosa o c'è qualcosa che ti sembra strana?

    Grazie comunque...

  4. #4

    Ho ristretto il campo, ma non ho risolto.

    Premetto che non ne capisco molto di Javascript/Jquery.
    Non ho per niente risolto il problema descritto a primo POST e sto diventando pazzo perchè sono certo che alla fine sarà la solita supidaggine.

    Guardate il codice che ho postato prima...
    Se io disabilito il controllo AJAX del form, cioè cancello l'intero script, la mail viene mandata.

    L'unica modifica che ho effettuato al codice HTML del form è questa:
    codice:
    <form id="contact-us" action="<?php bloginfo('siteurl'); ?>/" method="post">
    Ripeto: senza controllo campi AJAX, funziona.

    Lo script AJAX, però, fa il suo lavoro: controlla i campi obbligatori e garantisce gli effetti che io voglio. Dopo la sua azione, compare il messaggio di conferma invio, ma la mail non viene inviata.
    Qualcuno sa aiutarmi per favore?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Se l'unica cosa che cambi è l'action del form(ho capito bene?), sicuro che l'url generato da php sia corretto? In uno dei post precedenti dici "La sction dovrebbe portare alla pagista stessa!". L' action deve essere valorizzata con il path/url della pagina php che invia la mail.

  6. #6

    hai ragione...

    Difatti è così...

    Il sito è su wordpress, tutto in una pagina.
    La url del form è corretta, difatti senza lo script come ho scritto JS, tutto funziona.
    Dovrei lasciare la action vuota e impostare un path nellos cript stesso? Non so come si fa...

    Lo script JS l'ho preso da internet e non l'ho toccato.
    E' come se (guarda tu stesso) fa quello che deve fare e non procede con il SUBMIT.
    Se senza di lui la mail viene inviata, significa che è lo script che non procede con il submit.
    C'è poco da aggiugnere.

    Il problema è che non ci capisco un tubo (in termini spiccioli) per intervenire sullo script.
    :-(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.