Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Infatti sta succedendo questo.
    La funzione viene raggiunta prima che Ajax mi dia il response.
    Ciao, il problema di fondo è appunto questo.
    Come è già stato spiegato, AJAX è asincrono (se non diversamente specificato), a grandi linee, questo significa che il submit è già stato eseguito quando avviene quel success.

    Tra l'altro il return restituisce il valore alla funzione in cui questo è posto (come accennava Andrea); per cui, nel tuo caso il false viene restituito alla funzione success, non a validazione (come invece dovrebbe essere per annullare l'effetto del submit). Ma in entrambe i casi sarebbe totalmente inutile per il motivo iniziale.

    Una soluzione potrebbe essere quella di impostare AJAX come "sincrono", ma questo in generale è fortemente sconsigliato. Non sto a spiegarti il perché.

    Per risolvere potresti usare un semplice pulsante, come indicato da Ciro, al posto del submit; quindi eseguire la funzione validazione al click di tale pulsante e forzare poi il submit al success della chiamata AJAX, ovviamente solo quando ottieni una risposta valida.

    Qui un semplice esempio (che andrà correlato dei relativi file php):
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script type="text/javascript">
          $(function(){
          
            $('#mysubmit').click(function(){validazione($('#myform'))}); // Evento click del falso submit
            
            function validazione($form){
              /*
                qui i vari controlli preliminari
              */
              var email = $("#email").val();
              
              $.ajax({
                type: 'post',
                url: 'sezione/registrazione/checkemail.php',
                data: {
                  user_email:email
                },
                success: function (response) {
                  if(response == '0') $form.submit(); // Se risposta valida, eseguo il submit
                  else alert('Email già esistente');
                },
                error: function (){alert('Impossibile connettersi al server')}
              });
            }        
          })
        </script>
      </head>
      <body>
        <form id="myform" action="dataprocess.php" method="post" >
          <!-- qui gli elementi del form -->
          <input id="email">
          <input id="mysubmit" type="button" value="Invia"><!-- questo è un falso submit -->
        </form>
      </body>
    </html>
    Chiaramente non c'è bisogno di ricordare che tutti i dovuti controlli eseguiti via JavaScript, lato client, andrebbero rieseguiti lato server.
    Ultima modifica di KillerWorm; 14-10-2016 a 01:15
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.