Chiamata Ajax E Completamento Form

Ciao A tutti,

sto facendo una form per inserire i dati anagrafici delle persone. Per il calcolo del CF avendo tutti i dati necessari volevo farlo calcolare da solo sul onfocus del campo. Ho fatto il codice php e’ funziona, ma non so quale e’ la strada migliore per

richiamare la funzione in ajax e riempire il campo in automatico.

Grazie mille.

Stefano w dein

Io includerei un file javascript esterno dentro al quale mi limiterei a fargli fare il suo dovere:




$(function(){

    $('#inputX, #inputY, #inputZ').change(function(){

        $.post('<?php echo Yii::app()->createUrl('ajax/compileCF'); ?>', {

            nome: $('#nome').val(),

            cognome: $('#cognome').val(),

            eta: $('#eta').val(),

            ...

        },function(json){

            if(json.success.toString() === true) {

                $('#codice_fiscale').val(json.codice_fiscale);

            }

        }, 'json');

    });

});



Quindi mi aspetterei un json in risposta da AjaxController::actionCompileFC() del tipo:




{

    "success": "true",

    "codice_fiscale": "poiodfahsdfjvgajvg"

}



oppure:




{

    "success": "false"

}



Ciao,

Sotto consiglio di "sensorario", che ringrazio, ho risolto il problema in questo modo:

ho creato questo js, ovviamente se tutti i campi necessari non hanno valore il calcolo del CF non viene eseguito.




$(function(){

    

    $('#Persona_codice_fiscale').focus(function(){

        

        // Per evitare di toccare il campo se gia' contiene una valore'

        if ($('#Persona_codice_fiscale').val().length != 0)

            return 0;

      

        // Verifico di avere tutti i dati necessari per calcolare il CF

        if ($('#Persona_nome').val().length == 0)

            return 0;

        

        if  ($('#Persona_cognome').val().length == 0 )

            return 0;

        

        if  ($('#Persona_sesso').val().length == 0 )

            return 0;

        

        

        if  ($('#Persona_data_nascita').val().length == 0 )

            return 0;

        

        if ($('#Persona_nazione_nascita').val() != 'ITALIA'){

                 

            $.post('index.php?r=persona/CF', {

                nome: $('#Persona_nome').val(),

                cognome: $('#Persona_cognome').val(),

                sesso: $('#Persona_sesso').val(),  

               // citta: $('#hidden_comune_nascita_id').val(), 

                 citta: "",

                data: $('#Persona_data_nascita').val(),

                nazione_nascita: $('#Persona_nazione_nascita').val()  

           

            },function(json){

                if(json.success.toString() === "true") {

                    $('#Persona_codice_fiscale').val(json.codice_fiscale);

                }

                else {

                    $('#Persona_codice_fiscale').val('errore');

                }

            }, 'json');

        } // if

        

        else

        {

            $.post('index.php?r=persona/CF', {

                nome: $('#Persona_nome').val(),

                cognome: $('#Persona_cognome').val(),

                sesso: $('#Persona_sesso').val(),  

                citta: $('#hidden_comune_nascita_id').val(), 

                data: $('#Persona_data_nascita').val(),

                nazione_nascita: $('#Persona_nazione_nascita').val()  

           

            },function(json){

                if(json.success.toString() === "true") {

                    $('#Persona_codice_fiscale').val(json.codice_fiscale);

                }

                else {

                    $('#Persona_codice_fiscale').val('errore');

                }

            }, 'json');

        }

        

        

    });

}


);




Mentre per la questione php, metto solo il punto dove prendo le variabili passate in post e come restituisco il cf





  public function actionCF() {




        $cognome = $_POST['cognome'];

        $nome = $_POST['nome'];

        $data = $_POST['data'];

        $citta = $_POST['citta'];

        $sesso = $_POST['sesso'];

        $nazione = $_POST['nazione_nascita'];

...

...

...

$result = array('success' => 'true', 'codice_fiscale' => $cf.$checkCode);

        echo json_encode($result);


}




ovviamente la funzione CF deve essere abilitata




public function accessRules() {

        return array(

            array('allow', // allow all users to perform 'index' and 'view' actions

                'actions' => array('index', 'view', 'loadcities', 'loadcap', 'CF'),

                'users' => array('@'),




Ciao e grazie