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

    Return false, non funziona.

    Buonasera a tutti,
    ho un problema su un controllo di un form.
    Richiamo la validazione dei campi con il codice...

    codice:
    ... <form onsubmit="return validazione(this);" ...
    Il controllo Javascript funziona correttamente.
    Ho inoltre integrato nella funzione un controllo in Ajax che mi dice se l'email inserita nel campo "email" è già presente nel database. Funziona anche questo... Ma... Il problema è in questa parte di codice:

    codice:
     /* CONTROLLO ESISTENZA EMAIL NEL DB | INIZIO */ 
    
    
      $.ajax({
      type: 'post',
      url: 'sezione/registrazione/checkemail.php',
      data: {
       user_email:email,
      },
      success: function (response) {alert(response); return false;}
      });
    
    
     /* CONTROLLO ESISTENZA EMAIL NEL DB | FINE */
    response è una variabile che mi indica quante volte l'email è stata utilizzata nel database MySQL (generalmente dovrebbe restituire 1 o 0).

    Il problema che quell'alert temporaneo che ho messo non mi funziona e il submit viene eseguito.
    Non capisco perchè.

    Sono certo del funzionamento perchè se sostituisco alert(response); return false;
    con document.write(response) mi da esattamente il numero di cui ho bisogno.

    In sostanza, per me:
    - Se "response" è 0, devo dare un return true al submit;
    - Se "response" è maggiore di 0, devo dare un return false e bloccare il submit.

    Non capisco perchè non va.

    Attendo vostre e ringrazio in anticipo.

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,507
    per farla breve il return false non lo deve restituire il success della chiamata ajax. ma la funzione validazione.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Ciao Ciro,
    grazie per la risposta prima di tutto.
    In realtà ho già provato come dici tu, ma riscontro lo stesso problema.
    Chiaramente tutto il codice che ti riporto, è all'interno di validazione().

    codice:
     /* CONTROLLO ESISTENZA EMAIL NEL DB | INIZIO */ 
    
    
    
    
      $.ajax({
      type: 'post',
      url: 'sezione/registrazione/checkemail.php',
      data: {
       user_email:email,
      },
      success: function (response) {n_email = response;}
      });
    
    
    
    
    if(n_email==0){return true;}else{return false;}
    
    
     /* CONTROLLO ESISTENZA EMAIL NEL DB | FINE */
    Anche in questo modo, il submit viene eseguito e proprio non mi spiego il motivo.

    Ti ringrazio per il momento.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Come l'hai sviluppata il return è dentro la chiamata Ajax se vuoi bloccare l'invio devi eseguire il controllo 0/1 nel validate usando una variabile globale
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Come l'hai sviluppata il return è dentro la chiamata Ajax se vuoi bloccare l'invio devi eseguire il controllo 0/1 nel validate usando una variabile globale
    Ciao Andrea,
    grazie anche a te per la risposta tempestiva.
    Non so se hai visionato l'ultimo messaggio scritto.

    Ma anche esternando il return dall'Ajax, ed integrandolo nella funziona validate() non ho risolto.
    Forse se mi incollate una parte di codice modificata, così da capire meglio...

    Grazie ancora per le risposte.

  6. #6
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,507
    io adotterei altra strategia.

    utilizza un button invece di un subimit. nel success delle chiamata ajax invii il form con jquery.

    quando si utilizzano chiamate asincrone la fine della funzione potrebbe essere raggiunta prima del response di ajax.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  7. #7
    Quote Originariamente inviata da ciro78 Visualizza il messaggio
    io adotterei altra strategia.

    utilizza un button invece di un subimit. nel success delle chiamata ajax invii il form con jquery.

    quando si utilizzano chiamate asincrone la fine della funzione potrebbe essere raggiunta prima del response di ajax.
    Infatti sta succedendo questo.
    La funzione viene raggiunta prima che Ajax mi dia il response.

    Ok, faccio delle prove. Mi hai aperto un pò gli occhi...

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Hai provato con ?

    Codice PHP:
    $.ajax({
      
    type'post',
      
    url'sezione/registrazione/checkemail.php',
      
    data: {
       
    user_email:email,
      }
      }).
    done(funzione js che ritorna true o false); 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    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

  10. #10
    Grazie mille a tutti, ho capito finalmente il problema.
    Grazie mille specie a KillerWorm che scrivendomi il codice mi ha facilitato ancora di più.
    Ho adattato il tutto e funziona perfettamente.

    Gentilissimi, grazie ancora.
    Stefano

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 © 2024 vBulletin Solutions, Inc. All rights reserved.