Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174

    Problema visibilità delle variabili

    Salve a tutti. Premetto che non sono molto ferrato col javascript e un po' mi ostino a contemplarlo nonostante io riconosca le sue potenzialità.
    Il mio problema è il seguente: sto realizzando un sistema di registrazione utente e per il form effettuo il controllo dei campi sul lato client. Sto inoltre usando jQuery.

    L'html del form è il seguente

    codice:
    <form id="registrationform" action="dispatcher.php" method="post">
        <div class="formelem">
            <label for="email">email</label>
            <input type="text" name="email" />
            <span id="email" class="error" />
        </div>
        <div class="formelem">
            <label for="username">username</label>
            <input type="text" name="username" />
            <span id="username" class="error" />
        </div>
        <div class="formelem">
            <label for="password">password</label>
            <input type="password" name="password" />
            <span id="password" class="error" />
        </div>
        <div class="formelem">
            <label for="rpassword">conferma password</label>
            <input type="password" name="cpassword" />
            <span id="rpassword" class="error" />
        </div>
        <div class="formelem">
            <input type="submit" name="action" value="register" />
            torna alla home
        </div>
    </form>
    banale html; nella stessa pagina importo lo script seguente

    codice:
    username = false;
    email = false;
    password = false;
    cpassword = false;
    cango = false;
    
    $(document).ready(function() {
        $('input[type=text]').blur(function() {
            var name = $(this).attr('name');
            var value = $(this).val();
        
            $.ajax({
                type: 'post',
                url: 'dispatcher.php',
                data: 'action=check&field=' + name + '&value=' + value,
                success: function(data) {
                    if (data == 'ok' && name == 'email') {
                        email= true;
                    }
                    if (data == 'ok' && name == 'username') {
                        username = true;
                    }
                }
            });
        });
    });
    il mio problema si verifica dentro il blocco della funzione success della chiamata ajax: nonostante riceva in data il valore ok le variabili globali username e email mi restano a false;
    mi sapreste dire gentilmente dove sbaglio?
    Grazie infinite.

  2. #2
    Codice PHP:
    //sbagliato ottieni false
    miaglobale false;
    function 
    mytest(){
      function 
    inner(){
       
    //questa è locale
        
    var miaglobale 'pippo';
      }
      
    inner();
      
    alert(miaglobale);
    }
    mytest();
    //giusto ottieni pippo
    var miaglobale false;
    function 
    mytest(){
      function 
    inner(){
        
    miaglobale 'pippo';
      }
      
    inner();
      
    alert(miaglobale);
    }
    mytest(); 
    se togli tutte le globali lo script funzionera come deve.

    le inner function vedono hanno sempre accesso alle variabili
    definite nelle outer function.


    http://stackoverflow.com/questions/2...on-scope-chain
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Ciao, grazie per la risposta ma purtroppo non mi è del tutto chiara la soluzione.
    codice:
    //sbagliato ottieni false 
    miaglobale = false; 
    function mytest(){ 
      function inner(){ 
       //questa è locale 
        var miaglobale = 'pippo'; 
      } 
      inner(); 
      alert(miaglobale); 
    } 
    mytest();
    questa parte mi è chiara sto dichiarando miaglobale dentro la funzione inner e 'pippo' viene assegnata a questa e non a miaglobale prima di mytest

    codice:
    //giusto ottieni pippo 
    var miaglobale = false; 
    function mytest(){ 
      function inner(){ 
        miaglobale = 'pippo'; 
      } 
      inner(); 
      alert(miaglobale); 
    } 
    mytest();
    qui dichiaro miaglobale con var e dentro inner, nell'assegnamento, assegno 'pippo' a var miaglobale ma nel mio codice la situazione non cambia.

  4. #4
    in parole povere togli quelle axxo di variabili globali !


    che non servono ad una beneamata pippa

    qui ok
    Codice PHP:
    data'action=check&field=' name '&value=' value
    ma usa
    https://developer.mozilla.org/en/Jav...deURIComponent
    ma poi qui che vuoi fare !

    Codice PHP:

                success
    : function(data) {
                    if (
    data == 'ok' && name == 'email') {
                        
    emailtrue;
                    }
                    if (
    data == 'ok' && name == 'username') {
                        
    username true;
                    }
                } 

    data ti ritorna dal server quindi
    name == 'email' name == 'username'
    è concettualmente sbagliato.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    forse ci sono faccio una prova e ti faccio sapere

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    si, data mi ritorna dal server ma perché è concettualmente sbagliato come dici? io con lo stesso codice faccio il controllo sue due campi diversi (due piccioni con una fava) e mi serve distinguere se il data è riferito ad email o a username in modo da settare a true la variabile giusta e non capisco come fare altrimenti a controllare tutti i campi senza usare le variabili globali

    questo è il codice per intero

    codice:
    var email = false;
    var username = false;
    var password = false;
    var cpassword = false;
        
    $(document).ready(function() {
        /* disabilita il pulsante per l'invio del form */
        $('input[value=register]').attr({
            disabled: 'disabled'
        });
        
        /* controllo il campo username o email */
        $('input[type=text]').blur(function() {
            var error = false;
            var name = $(this).attr('name');
            var value = $(this).val();
            
            /* controllo formato email */
            if (name == 'email') {
                var pattern = /^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z0-9]{2,4}$/;
                if (!pattern.test(value)) {
                    error = true;
                    showErrorMessage('email non valida', 'email')
                }
            }
            /* controllo formato username */
            if (name == 'username') {
                pattern = /^[a-z0-9]{6,10}$/;
                if (!pattern.test(value)) {
                    error = true;
                    showErrorMessage('username non valido', 'username');
                }
            }
            /* controllo univocità campo */
            if (!error) {
                $.ajax({
                    type: 'post',
                    url: 'dispatcher.php',
                    data: 'action=check&field=' + name + '&value=' + value,
                    success: function(data) {
                        switch (name) {
                            case 'email':
                                if (data == 'ok') {
                                    email = true;
                                }else {
                                    showErrorMessage('email');
                                }
                                break;
                            case 'username':
                                if (data == 'ok') {
                                    username = true;
                                }else {
                                    showErrorMessage('username');
                                }
                                break;
                        }
                    }
                });
            }
        });
        
        /* controllo i campi password */
        $('input[type=password]').blur(function() {
            var name = $(this).attr('name');
            var value = $(this).val();
            
            if (name == 'password') {
                if (value != undefined && value.length > 0) {
                    password = true;
                } else {
                    showErrorMessage('password non valida', 'password');
                }
            }
            if (name == 'cpassword') {
                if (value != undefined && value.length > 0) {
                    var pwd = $('input[name=password]').val();
                    
                    if (value == pwd) {
                        cpassword = true;
                    } else {
                        showErrorMessage('le password non corrispondono', 'cpassword');
                    }
                } else {
                    showErrorMessage('password non valida', 'cpassword');
                }
            }
        });
        
        /* nascondo gli eventuali messaggi di errori per i campi validi */
        if (email) {
            hideErrorMessage('email');
        }
        if (username) {
            hideErrorMessage('username');
        }
        if (password) {
            hideErrorMessage('password');
        }
        if (cpassword) {
            hideErrorMessage('cpassword');
        }
        
        /* se i dati nei campi sono corretti riabilito il pulsante di invio */
        if (email && username && password && cpassword) {
            $('input[value=register]').removeAttr('disabled');
        }
        
        /* DEBUG: stampa valori */
        $('div#status > span#email').html(email ? 'true' : 'false');
        $('div#status > span#username').html(username ? 'true' : 'false');
        $('div#status > span#password').html(password ? 'true' : 'false');
        $('div#status > span#cpassword').html(cpassword ? 'true' : 'false');
    });
    
    function showErrorMessage(message, target) {
        $('span.error#' + target).html(message).css({
            display: 'inline'
        });
    }
    
    function hideErrorMessage(target) {
        $('span.error#' + target).css({
            display: 'none'
        });
    }
    ho sostituito l'if con uno switch ma concettualmente non cambia nulla

  7. #7
    ti do un consiglio studiati cosa è ajax
    perchè mescoli
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    ok, grazie del consiglio e della disponibilità e scusa il disturbo!

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174

    [RISOLTO]

    Problema risolto senza la necessità di leggere alcun libro su AJAX!!!
    Era un semplice errore nell'assegnazione

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.