Valori di ritorno json via ajax non visti.

MarcoGrazia

Utente Attivo
15 Dic 2009
785
16
18
58
Udine
www.stilisticamente.com
Questa applicazione non sa da fare :(
Va bene, dunque, devo rendere editabile il registro appuntamenti, niente di più semplice, un programma in PHP cicla i record estraendo quelli futuri, crea anche un elenco colorato in base alla vicinanza della scadenza, e tutto funziona fino a qui.
Sotto ogni "appuntamento" oltre ai dati essenziali, ci sono tre pulsanti: uno per vedere l'elenco completo delle informazioni ( allargando la vista ) uno per editare, ed uno per cancellare l'appuntamento.
Ora se clicco sul tasto per editare, mi si aprre una finestra modale con i campi in modalità edit, ogni campo è riempito con i dati prsenti nel database, uno li edita e poi preme il tasto salva. Facile no?
E no!
Perché sto avendo problemi a riempire i campi prima che la finestra venga mostrata.
In pratica, prendo via ajax il dato dal database e poi riempio i campi così come deve avvenire. ma non avviene.
Un poco di codice:
I dati in arrivo dal database e in formato JSON per l'esempio
{
"id_app":2,
"id_richiedente":8,
"id_num":0,
"giorno_app":"2020-07-26",
"ora_app":"10:40:00",
"nome":"Ciccio Formaggio",
"email":"",
"email_ufficio":"",
"pec":"",
"pec_ufficio":"",
"telefono":null,
"telefono_ufficio":null,
"cellulare":"",
"cellulare_ufficio":"",
"fax":"",
"azienda":"",
"motivo":"Ciao",
"durata_giorni":4,
"risposta":true
}
Il pezzo di codice HTML della pulsantiera:
HTML:
            <div class="btn-group" role="group" aria-label="Bottoniera per l'appuntamento">
                <button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Vede più dati" id="view-2">
                    <span class="fa fa-eye" aria-hidden="true"></span>
                </button>
                <button type="button" class="btn btn-primary" data-toggle="tooltip" data-placement="bottom" title="Modifica i dati" id="edit-2">
                    <span class="fa fa-edit" aria-hidden="true"></span>
                </button>
                <button type="button" class="btn btn-danger" data-toggle="tooltip" data-placement="bottom" title="Cancella l'appuntamento" id="delete-2">
                    <span class="fa fa-trash-o" aria-hidden="true"></span>
                </button>
            </div>
Il tasto chiamato edit- è il tasto per richiamare l'edit, il numero dopo il trattino è l'ID del record nel database.
E infine ecco il javascript che riempie ( dovrebbe riempire ) i campi della finestra prendendoli via ajax, di cui la porzione sopra viene dal programma remoto ( che quindi funziona ).
JavaScript:
                $( 'button[id^="edit-"]' ).click( function()
                {
                    var id = $( this ).prop( 'id' ).split( '-' );
                    $.ajax(
                    {
                        url: "getAppuntamento.php",
                        data: {identity: id[1]},
                        method: 'post',
                        dataType: 'text',
                        success: function( data, status, xhr )
                        {
                            if ( status == 'success' && data.risposta == false )
                            {
                                alert( "Si è verificato un errore tentando di registrare i dati.\nProva di nuovo e se si verifica ancora l'errore,\navvisa l'amministratore del sito.");
                            }
                            else if ( status == 'success' && data.risposta == true )
                            {
                                $( '#appuntamento-num').val( id[1] );
                                $( '#appuntamento-ute').val( <?php echo $datiSessione['id_ute']; ?> );
                                $( '#appuntamento-calendario' ).val( data.giorno_app );
                                $( '#appuntamento-orario' ).val( data.ora_app );
                                $( '#appuntamento-user' ).val( data.nome );
                                //   Seguono altri campi....

                                $( '#appuntamenti' ).show( 300 );
                            }
                            else
                            {
                                alert( "Errore grave tentando di leggere nel database!\nAvvisare l'amministratore di sistema." );
                            }
                        }
                    });
                });
quando si preme il tato edit, viene richiamato questo pezzo di codice, per prima cosa viene preso l'ID, effettuato lo split del nome in modo da ricavare il numero dell'ID del database, che poi viene passato al file remoto.
Il file remoto risponde in diversi modi:
  1. data.risposta = false ( non esiste nel database tale record );
  2. data.risposta = true ( record trovato ) e poi va avanti a riempire i campi prima di visializzare la finestra modale;
  3. errore generico.
Il problema è in data, in pratica l'analizzatore mi riporta i dati, il pezzo di codice in cima è preso da lì, quindi sono dati autentici ritornati dal record; nella sezione di codice success: function( data... data è riempito con il record [vedi 1:] ma poi non legge nulla e mi va sempre nell'ultimo pezzo del controllo facendo partire l'alert di errore grave.

[1] immagine dei dati presenti
Clipboard01.jpg

[2] L'immagine con i dati di ritorno
Clipboard01.jpg
 

MarcoGrazia

Utente Attivo
15 Dic 2009
785
16
18
58
Udine
www.stilisticamente.com
Sta iniziando a funzionare, in pratica all'inizio mi ero reso conto che stavo aspetando una risposta json, ma l'ajax era settato per aspettarsi un html.
Corretto, avevo lo stesso problema, ho scoperto che la stringa da remoto veniva interpretata sempre come una stringa di caratteri e non come un oggetto JSON.
Non ho capito il perché, ma mi sono adeguato, ho utilizzato un altro tipo di approccio, usando la getJSON() ed ha funzionato!
JavaScript:
                 $.getJSON(
                        "getAppuntamento.php",
                        {identity: id[1]},
                        function( data, status, xhr )
                        {
                            if ( status == 'success' && data.risposta == false )
                            {
                                alert( "Si è verificato un errore tentando di registrare i dati.\nProva di nuovo e se si verifica ancora l'errore,\navvisa l'amministratore del sito.");
                            }
                            else if ( status == 'success' && data.risposta == true )
                            {
                                $( '#appuntamento-num').val( id[1] );
                                $( '#appuntamento-ute').val( <?php echo $datiSessione['id_ute']; ?> );
                                $( '#appuntamento-calendario' ).val( data.giorno_app );
                                $( '#appuntamento-orario' ).val( data.ora_app );
                                $( '#appuntamento-user' ).val( data.nome );
                                $( '#appuntamenti' ).show( 300 );
                            }
                            else
                            {
                                alert( "Errore grave tentando di leggere nel database!\nAvvisare l'amministratore di sistema." );
                            }
                        }
                    );