Error anomalo durante invio dati $.ajax

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Sto letteralmente impazzendo.. Ecco l'anomalia:
Uso questo script per inviare alcuni dati ad una pagina php che ha il semplice compito di raccogliere questi dati ed inviare una semplice mail.
FUNZIONA TUTTO ( nel senso che la mail arriva, perfettamente compilata con tutti i valori, superando con successo i controlli impostati sui campi ), ma quando clicco sul button di invio, nonostante indati vengano passati, mi parte l'alert dell'errore impostato nella richiesta ovvero:
Codice:
error: function ()
                {
                    alert("Invio fallito, si prega di riprovare...");
                    return false;
                }
posto il codice ( qualora sia necessario anche la pagina in privato ).
Ringrazio per la gentile attenzione.
Codice:
/* Invio Prenotazione Mail */

jQuery(document).ready(function ($) {
    $(document).on('click','#invio',function () {
    //Imposto le variabili e recupero i valori
        var arrivo = $("input[type=date]#arrivo").val();
        var partenza = $("input[type=date]#partenza").val();
        var nomecognome = $("#nomecognome").val();
        var telefono = $("#telefono").val();
        var nadulti = $("input[type=number]#nadulti").val();
        var nbambini = parseInt($("input[type=number]#nbambini").val());
        var sEmail = $("#email").val();
        var age02 = parseInt($("input[type=number]#age02").val());
        var age315 = parseInt($("input[type=number]#age315").val());
        var age1617 = parseInt($("input[type=number]#age1617").val());
        var controllo = $("#controllo").val();
   
        // Funzione valido email
        function validateEmail(sEmail) {
            var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
            if (filter.test(sEmail)) {
                return true;
            } else {
                return false;
            }
        }
   
        // Funzione valido telefono
        function validateTel(telefono) {
            var filter = /^[\s\-?\(?\)?\+?[0-9]{1,}$/;
            if (filter.test(telefono)) {
                return true;
            } else {
                return false;
            }
        }
   
        // Funzione valido Nome e Cognome
        function validateName(nomecognome) {
            var filter = /^[\s*a-zA-Z]{1,}$/;
            if (filter.test(nomecognome)) {
                return true;
            } else {
                return false;
            }
        }
   
        // Funzione valido Bambini
        function validateBamb(age02, age315, age1617) {
            var sommatoriaBamb = age02+age315+age1617;
            if ( nbambini < sommatoriaBamb || nbambini > sommatoriaBamb ) {
                return false;
            } else {
                return true;
            }
        }

 
        //Controllo campi
        if (!validateEmail(sEmail))  {
       
            $('.errore-compilazione').text('Il campo mail è vuoto o non valido.');
            $(".errore-compilazione").slideDown("slow");
            return false;
       
        } else if (arrivo == "") {
       
            $('.errore-compilazione').text('Il campo arrivo non può essere vuoto.');
            $(".errore-compilazione").slideDown("slow");
            return false;
   
        } else if (partenza == "") {
       
            $('.errore-compilazione').text('Il campo partenza non può essere vuoto.');
            $(".errore-compilazione").slideDown("slow");
            return false;
   
        } else if (nadulti == "") {
       
            $('.errore-compilazione').text('Il numero degli adulti non può essere vuoto.');
            $(".errore-compilazione").slideDown("slow");
            return false;
   
        } else if (!validateName(nomecognome)) {
       
            $('.errore-compilazione').text('Il campo nome non può essere vuoto e può contenere solo lettere e spazi.');
            $(".errore-compilazione").slideDown("slow");
            return false;
   
        } else if (!validateTel(telefono)) {
       
            $('.errore-compilazione').text('Il campo telefono è obbligatorio ed accetta solo numeri, spazi, () e +.');
            $(".errore-compilazione").slideDown("slow");
            return false;
       
        } else if (!validateBamb(age02,age315,age1617)) {
       
            $('.errore-compilazione').text('Il numero dei bambini non coincide.');
            $(".errore-compilazione").slideDown("slow");
            return false;
       
        } else {
       
            $.ajax({
                type: "POST",
                url: "/landing/ppc-new/prenotazioni/mail_invio.php",
                data: "partenza=" + $.trim(partenza) + "&arrivo=" + $.trim(arrivo) + "&nomecognome=" + $.trim(nomecognome) + "&telefono=" + $.trim(telefono) + "&nadulti=" + $.trim(nadulti) + "&nbambini=" + $.trim(nbambini) + "&email=" + $.trim(sEmail) + "&controllo=" + $.trim(controllo) + "&age02=" + $.trim(age02) + "&age315=" + $.trim(age315) + "&age1617=" + $.trim(age1617),
                dataType: "html",
                success: function ()
                {
                    if($('div.errore-compilazione').css('visibility')=='hidden' || $('div.errore-compilazione').css('display')=='none'){
                            $("div#risposta-good").slideDown("slow");
                        return false;
                    }else{
                        $('div.errore-compilazione').slideUp("slow", function(){
                            $("div#risposta-good").slideDown("slow");
                        });
                        return false;
                    }
                },
                error: function ()
                {
                    alert("Invio fallito, si prega di riprovare...");
                    return false;
                }
            });
       
        }
   
    });
});

Ho provato a smontarlo e ridurlo ai minimi termini ma, la cosa strana è che non funziona neanche così... Ho allegato un'immagine del presunto errore..
Codice:
/* Invio Prenotazione Mail */

jQuery(document).ready(function ($) {
    $(document).on('click','#invio',function () {
    //Imposto le variabili e recupero i valori
        var arrivo = $("input[type=date]#arrivo").val();
        var partenza = $("input[type=date]#partenza").val();
        var nomecognome = $("#nomecognome").val();
        var telefono = $("#telefono").val();
        var nadulti = $("input[type=number]#nadulti").val();
        var nbambini = parseInt($("input[type=number]#nbambini").val());
        var sEmail = $("#email").val();
        var age02 = parseInt($("input[type=number]#age02").val());
        var age315 = parseInt($("input[type=number]#age315").val());
        var age1617 = parseInt($("input[type=number]#age1617").val());
        var controllo = $("#controllo").val();
         
            $.ajax({
                type: "POST",
                url: "/landing/ppc-new/prenotazioni/mail_invio.php",
                data: "partenza=" + $.trim(partenza) + "&arrivo=" + $.trim(arrivo) + "&nomecognome=" + $.trim(nomecognome) + "&telefono=" + $.trim(telefono) + "&nadulti=" + $.trim(nadulti) + "&nbambini=" + "&email=" + $.trim(sEmail) + "&controllo=" + $.trim(controllo),
                dataType: "html",
                success: function ()
                {
                 
                },
                error: function ()
                {
                    alert("Invio fallito, si prega di riprovare...");
                    return false;
                }
            });
         

     
    });
});
 

Allegati

  • asasas.jpg
    asasas.jpg
    109,2 KB · Visite: 355
Ultima modifica:
Aggiungo inoltre che anche provando in questo modo mi restituisce fail con questo errore "undefined" nell'alert, pur inviando i dati:
Codice:
        $.post("/landing/ppc-new/prenotazioni/mail_invio.php",
        {
                partenza: $.trim(partenza),
                arrivo: $.trim(arrivo),
                nomecognome: $.trim(nomecognome),
                telefono: $.trim(telefono),
                nadulti: $.trim(nadulti),
                nbambini: $.trim(nbambini),
                email: $.trim(sEmail),
                controllo: $.trim(controllo),
                age02: $.trim(age02),
                age315: $.trim(age315),
                age1617: $.trim(age1617)
        })
        .done(function() {
          if($('div.errore-compilazione').css('visibility')=='hidden' || $('div.errore-compilazione').css('display')=='none'){
                    $("div#risposta-good").slideDown("slow");
                return false;
            }else{
                $('div.errore-compilazione').slideUp("slow", function(){
                    $("div#risposta-good").slideDown("slow");
                });
                return false;
            }   
        })
        .fail(function(xhr, status, error) {
            alert(xhr.responseText);
        });
 
mi sono ripromesso di fare una prova anche se non ho ancora potuto,
ma fammi passare una domanda un po' stupida,
nello script "mail_invio.php" dopo aver inviato la mail,
cosa ritorni alla pagina per "soddisfare" l'attesa del risultato di Ajax ?
 
Innanzitutto grazie per la risposta :P
Nulla. Ma questo stesso script in un'altra pagina funziona, esattamente com'è e neanche li ho nulla che restituisce nulla.
Non ne capisco tantissimo di questo linguaggio, correggimi se sparo fesserie, ma in pratica il success non si attiva se la pagina viene trovata e vengono inviati i dati?
 
quando ho usato Ajax ho dovuto sempre restituire un dato altrimenti scattava il "timeout"
prova a restituire una stringa con un' echo (che poi non usi....)
 
E come si fa? ( perdona l'ignoranza )
Nell'altro script praticamente identico ho controllato ma non risulta nulla, neanche un echo. Anche l'altro script finisce con un semplice e banale invio mail..

Codice:
...
if(filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($email)
        && isset($nomecognome) && !empty($nomecognome)
        && isset($arrivo) && !empty($arrivo)
        && isset($partenza) && !empty($partenza)
        && isset($nadulti) && !empty($nadulti)
        && isset($telefono) && !empty($telefono)
        && $controllo == ''            
   ){
    $msg->Send();
}

Ho provato a modificare così ma nulla..
Codice:
if(filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($email)
        && isset($nomecognome) && !empty($nomecognome)
        && isset($arrivo) && !empty($arrivo)
        && isset($partenza) && !empty($partenza)
        && isset($nadulti) && !empty($nadulti)
        && isset($telefono) && !empty($telefono)
        && $controllo == ''              
   ){
    $msg->Send();
    echo 'Ok';
}else{
    echo 'No';
}

Ho provato a seguire un tutorial per inserire un echo che viene restituito nella funzione success tipo
success: function(data) ... ma nulla...
 
Ultima modifica:
PHP:
nello script php, prima della fine (chiusura) inserisci

echo "mail inviata";

che poi devi ritrovare nel log (o alert se preferisci)

success: function(response)
{
    console.log('risposta ricevuta : '+response);
},
 
Sisi fatto con .html() in un div che dovrebbe apparire se l'invio avviene ma nulla.. anche perchè mi parte proprio l'alert dell'invio errato che parte quando si aziona error.


Inviato dal mio iPhone utilizzando Tapatalk
 
Ciao, cambia l'error cosi
Codice:
error: function (request, status, error) {
        alert(request.responseText);
    }
vedi se ti da qualche informazione in più
 
nello script php ho messo solo "error_log" scrivendo le variabili ed il loro valore nel log di php
ho messo i javascript (localizzati in fondo alla pagina) nello stesso folder della pagina (da download)
attivato console log
e tutto funziona,
Cattura.PNG
nel log di php ci sono variabili e valori per l'invio della mail
 
A me continua a non funzionare.. ho provato quanto suggerito da criric ma il risultato è stato quello che vedete nelle imm allegate.. Questi errori mi restituisce in consolle..
Magari a voi dicono qualcosa.

Marino non ho ben capito il tuo test che risultati ti da? Può essere colpa del server su cui è hostato il sito? Ho provato a spostarlo su un altro server ma la storia non cambia. Magari può essere la mail molto lenta nell'invio, so che è un problema noto del server in uso, quella non l'ho mai cambiata.
 

Allegati

  • error.png
    error.png
    10,3 KB · Visite: 384
  • imm3.png
    imm3.png
    39,8 KB · Visite: 371
  • immasas.png
    immasas.png
    24,6 KB · Visite: 386
  • test1.png
    test1.png
    35,6 KB · Visite: 354
Ultima modifica:
1) ho ripreso la pagina, ho messo in locale i js, ho messo dei "log" in scripts.js,
funziona correttamente, passa da "success" come registrato nell'immagine postata

2) ho messo uno sleep di 280 sec nel "mail_invio.php" per simulare un lungo ritardo nella risposta ma continua a funzionare,

non riesco a riprodurre l'errore
 
Io ho provato a cambiare mail e dominio, ho spostato tutto su un altro server cambiando mail ma nulla sembra una maledizione. ( uso php mailer ed invio con smtp, lo scrivo tante volte centrasse qualcosa ).


Inviato dal mio iPhone utilizzando Tapatalk
 
di nuovo scusa la banalità,
rimettendo tutto come in origine (primo post), hai provato ad usare un browser diverso tipo un ie per esempio ?
con quale risultato ?
 
No non ho ancora fatto questa prova. Lunedì mi rimetto sotto, sono partito per queste feste e non ho modo di fare prove. Grazie nel frattemo.


Inviato dal mio iPhone utilizzando Tapatalk
 
Ho fatto la prova con un browser diverso ed in questo caso non esce il messaggio di errore, ma neanche quello di successo.
 
Si. Come sempre la mail arriva ma questa volta non ricevo l'errore ma non ricevo neanche il success.
 
Questa mattina ho fatto un'altra prova. Pensavo che il formato data potesse influire sull'errore ho provato a sostituire ve variabili splittandole e poi ricomponendole dopo l'invio ma ancora nulla. La mail arriva come sempre ma l'errore NON riesco proprio a capire dove sta.
Codice:
var arrivo = $("input[type=date]#arrivo").val();
        var datanewx = arrivo.split('-'); 
        var datanew1 = datanewx[0];
                var datanew2 = datanewx[1];
                var datanew3 = datanewx[2];
        var partenza = $("input[type=date]#partenza").val();
        var datanewy = partenza.split('-'); 
        var datanew4 = datanewy[0];
                var datanew5 = datanewy[1];
                var datanew6 = datanewy[2];
        var nomecognome = $("#nomecognome").val();
        var telefono = $("#telefono").val();
        var nadulti = $("input[type=number]#nadulti").val();
        var bambini = parseInt($("input[type=number]#nbambini").val());
        var nbambini = parseInt((!isNaN(bambini) ? bambini : 0));
        var sEmail = $("#email").val();
        var age02 = parseInt($("input[type=number]#age02").val());
        var age315 = parseInt($("input[type=number]#age315").val());
        var age1617 = parseInt($("input[type=number]#age1617").val());
        var controllo = $("#controllo").val();

La cosa strana è che non funziona neanche :
Codice:
complete: function ()
                {  }
ed ho come l'impressione che si ricarichi la pagina..
 
Ultima modifica:
ti confermo che dopo la funzione Ajax, si ricarica la pagina (submit del form),
prova a sostituire "submit" con "button" e vedi l'effetto che fa,
HTML:
<button type="button" onclick="ga('send', 'event', 'Call To Action', 'Landing', 'Invio Richiesta Preventivo', '1')" class="btn" id="invio" >RICHIEDI PREVENTIVO</button>
 
  • Like
Reactions: otto9due

Discussioni simili