funzioni asincrone e callback...help!

Discussione in 'Ajax' iniziata da ato, 2 Luglio 2017.

Tag (etichette):
  1. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Salve a tutti.
    Sono nuovo del forum ed abbastanza nuovo nella programmazione javascript/ajax...web in generale.
    Programmo con vbnet di solito.
    Dunque la cosa che non riesco a capire è come risolvere questo workflow che vado a spiegarvi...niente di complicato, ma per me ancora lo è.
    Supponiamo di avere un classico form di un inserimento dati di una anagrafica...cognome,nome,indirizzo etc.
    Ad un certo punto clicco sul pulsantino salva
    Il messaggio finale del pulsantino salva è: "Salvataggio effettuato" oppure "Errore nel salvataggio"

    Quando clicco su salva faccio un controllo (lato client...cioè se la data di nascita è corretta, se i campi sono stati valorizzati...il classico controllo insomma) sui dati inseriti.
    Poi (ed è qui che chiedo il Vs aiuto) devo fare un controllo (lato server) se l'indirizzo inserito è corretto, ovvero se la città esiste, se la città ha uno stradario e quindi cercare la strada nel relativo stradario, se la strada ha dei numeri civici particolari, e quindi cercare il numero civico inserito nella tabella dei civici di quella strada...tutto questo lo faccio chiamando una funzione ajax (asincrona...al momento però l'ho settata sincrona...ma è deprecata ed ecco perchè Vi scrivo) alla fine mi dirà OK oppure Errore nell'indirizzo.
    Bene (anzi male) a me da sempre "Errore nel salvataggio" perchè siccome è asincrona la chiamata per il controllo dell'indirizzo...passa subito all'istruzione successiva.

    scrivo in pseudo codice...non proprio javascript (scusatemi)

    function btnSalva()
    controllo lato cliente dei dati inseriti
    risultato=funzioneAjaxControlloIndirizzo(pagina.php,parametri...) //lato server

    if risultato=Ok then
    aggiungi/modifica record
    alert ("Salvataggio effettuato")
    else
    alert ("Errore nel salvataggio")
    end if
    end function

    Ho capito che dovrei usare una callback...ho visto e letto dei tutorial ma non ancora riesco a comprenderla appieno...c'è qualcuno che potrebbe aiutarmi con degli esempi pratici?
    Grazie a tutti.
    Ciao
     
  2. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao ragazzi. Non c è proprio nessuno che può aiutarmi?.
     
  3. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Scusatemi, ma se uno poi dopo due settimane senza ricevere nessun tipo di risposta fa crossposting chiedendo su altri forum...non va bene!?
    :)
     
  4. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.677
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    spesso succede di vedere il fenomeno con differenza di tempo 0 quindi se hai atteso 2 settimane, sei stato bravo
    mi sento meno bravo ad inventarmi cose che stanno nella testa di altre persone,
    non hai pubblicato codice ma uno pseudo workflow, sintetizzando ciò che è importante, per capire, in una dicitura "funzioneAjaxControlloIndirizzo"
    ebbene io non ho mai avuto necessità di funzioni callback,
    applicando bene la funzionalità Ajax e facendola interagire altrettanto bene con php e js, normalmente non vi sono problemi,
    se vuoi provare a postare del codice, magari non kilometrico, potremmo ragionare meglio
     
  5. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Bene, Dio sia lodato! Qualcuno mi ha risposto. Grazie! La cosa è piuttosto semplice e nn c è bisogno di codice... Immagina di fare un controllo lato server ed in base all esito del controllo decidere se proseguire si o no. Il fatto che la chiamata sia asincrona non mi da il " tempo" di decidere in base al risultato... Prosegue immediatamente all istruzione successiva alla chiamata ajax..proprio perché è asincrona. Molti hanno avuto questo problema e l hanno risolto con le callback oppure semplicemente impostanto async=false ...ma è deprecato. Quindi sto qui a chiedere un aiuto un esempio su come eseguire una callback applicata al mio caso. Ora sto scrivendo con il mio cellulare... Non riesco a fare esempi ma se rileggi il primo post credo si possa comprendere...non si tratta di errore di codice ma piuttosto di metodo. Cmq grazie per avermi risposto:)
     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.677
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    appunto di metodo, visto che non lo hai fatto tu, provo a postare un esempio e ragioniamo su questo

    PHP:
            $.ajax
            
    ({
                
    type"GET",
                
    url:  myURL,
                
    data"",
                
    success: function(risposta)
                {
                    
    // il dialogo con lo script sul server è terminato con successo

                    
    console.log('dati ricevuti : '+risposta);

                    
    // .... qui tutto il codice da eseguire in base alla risposta dello script sul server
                    //      la risposta può essere positiva con dati da visualizzare o comportamenti consoni
                    //      oppure lo script ha segnalato errore nei dati inviati, va gestita la segnalazione

                
    },
                
    error: function(errore)
                {
                    
    // problemi nel dialogo con lo script sul server

                    
    alert('ERRORE : il server non risponde o lo ha fatto in modo anomalo '+errore);
                }
            }); 
    quindi ?
     
  7. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    di conseguenza esito è sempre = 0 !!!
    Ciao :)
     
  8. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.677
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    credo di aver capito cosa intendi,
    il problema non è Ajax che funziona in modo asincrono,
    ma è il browser che suddivide il codice, eseguendolo in parallelo, per ridurre i tempi di visualizzazione della pagina

    qui trovi una discussione dove Ajax c' entra men di niente, ma le due funzioni sono eseguite in sequenza, cosa che non avverrebbe se usate in maniera non controllata
    https://stackoverflow.com/questions/1859185/how-to-force-sequential-javascript-execution

    nel tuo esempio, è sufficiente tenere legato il codice da eseguire dopo, con la funzione Ajax stessa,
    HTML:
    var prova = 0;
    
    $.ajax
    ({
        type:    'post',
        cache:   false,
        url:     'esempio_7.php',
        data:    data,
        success: function(response) { prova = 1; $('#myDiv').html(response); passi_successivi(); },
        error:   function()         { prova = 2; alert("malfunzionamento ajax"); passi_successivi(); }
    });
    
    function passi_successivi() { alert("prova : "+prova); }
    upload_2017-7-19_15-28-4.png
     
    Ultima modifica: 19 Luglio 2017 alle 17:31
  9. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Si Grazie :)
    Però era proprio quello che volevo evitare perchè il flusso del programma inizia ad entrare ed uscire dalle funzioni, purtroppo ho altri controlli che vengono eseguiti l'uno dopo l'altro e dipendono l'uno dall'altro.
    Avevo già in mente di fare così...vabbè mi armerò di pazienza e tabelle delle verità per vedere tutte le opzioni possibili in base ai risultati delle varie funzioni.
    Ciao :)
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.677
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    Non so com'è il tuo sviluppo, ma
    io prevedo i controlli sia dalla parte del client che dal server, per avere delle certezze
    ti suggerirei di sviluppare i controlli dalla parte del server, a cui passare i dati, con una sola richiesta Ajax
    e ricevere in cambio i risultati positivi o negativi che siano
    in questo modo se devi variare i controlli
    fai una sola modifica .....
    risulta più facile il debug costruendo insiemi campione ...
    non metti logica nel js che può essere "osservata" da chi non deve ....
    semplifichi js ed hai certezza che i controlli sono gli stessi sui due fronti ...
    ....
     
  11. ato

    ato Nuovo Utente

    Registrato:
    2 Luglio 2017
    Messaggi:
    8
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Si credo che farò così come mi hai suggerito tu. :)
    Anche se in realtà vorrei capire come usare le callback per non sopperire all'asincronismo.
    Grazie!
     
    Ultima modifica: 21 Luglio 2017 alle 13:46
Sto caricando...

Condividi questa Pagina