funzioni asincrone e callback...help!

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
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
 

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
Ciao ragazzi. Non c è proprio nessuno che può aiutarmi?.
 

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
Scusatemi, ma se uno poi dopo due settimane senza ricevere nessun tipo di risposta fa crossposting chiedendo su altri forum...non va bene!?
:)
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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
 

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
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:)
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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 ?
 

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
[PHP ha scritto:
...codice prima
...
...
var esisto =0;
$.ajax
({
type: "GET",
url: myURL,
data: "",
success: function(risposta)
{

esito=1;

},
error: function(errore)
{

esito=0;
}
});

...codice dopo

[/PHP]
quindi ?....e quindi lui passa direttamente a "codice dopo" perchè è asincrona

di conseguenza esito è sempre = 0 !!!
Ciao :)
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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:

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
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 :)
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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 ...
....
 

ato

Nuovo Utente
2 Lug 2017
8
0
1
71
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:
Discussioni simili
Autore Titolo Forum Risposte Data
S Differenza tra le funzioni include () e require ()? PHP 1
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
B Funzioni matematiche php PHP 2
G funzioni php pericolose Hosting 2
M [PHP] utilizzo di una classe e delle sue funzioni PHP 2
Arcadia [MS Access] Implementazione progetto con nuove funzioni. MS Access 0
N [Java] jbutton con funzioni Java 2
A Richiamare funzioni esterne JS da PHP PHP 9
M [Javascript] Spiegazioni di due funzioni Javascript 10
Andy56 Parametri funzioni in Java Java 0
A [PHP] info funzioni PHP 11
M La bozza di un sito con alcune funzioni javascript non si apre correttamente su smartphone Javascript 1
M Riadattamento funzioni per far scomparire un menu. jQuery 4
V Creare funzioni PHP per agevolare bootstrap PHP 1
B funzioni per creare file e inserirli dentro una certa cartella in php? PHP 1
epicbrozo [Javascript] Mi potreste spiegare passo passo i passaggi di due funzioni? Javascript 0
B [Javascript] funzioni non funzionanti in un form Javascript 8
V [Javascript] Funzioni su input dinamici Javascript 24
T [Javascript] un form con select dinamica che funzioni da menù... Javascript 2
N [php]icone funzioni tabelle PHP 12
localhost.nicola [Javascript] JS non esegue funzioni su bottoni stampati da chiamata AJAX Javascript 1
Andrea Perrone [Javascript] QUESITO SU FUNZIONI Javascript 28
M Sostituire le funzioni mysql con mysqli, ma quali? PHP 4
V Funzioni per il filesystem ed il percorso da inserire PHP 0
S funzioni per calcoli sulle date PHP 4
V problema con funzioni annidate Javascript 2
L Visibilità connessione Db con MySQLi in funzioni definite dall'utente PHP 0
A Passaggio di variabile tra funzioni PHP 5
MarcoGrazia Funzioni generiche per ogni uso Snippet PHP 0
M funzioni e gestori di eventi Javascript 1
neo996sps [PHP e funzioni con PDO] Funzione per generare corpo tabella PHP 1
R php.ini disabilitare funzioni PHP 2
otto9due Problema if elseif o foreach.. o non capisco cosa non funzioni.. PHP 4
M funzioni google maps sovrapposizione markers Javascript 0
O Non capisco cosa non funzioni.. :( Ajax 0
G Funzioni Template Tags WordPress 1
G Richiamare funzioni esterne PHP 0
S funzioni per immagini Javascript 1
B funzioni Javascript 0
A Raggruppare piu' funzioni in una sola PHP 1
P Unire due funzioni... Javascript 1
A .each con due funzioni per paramentro jQuery 0
Violetta De Amicis Conflitto funzioni jQuery jQuery 1
R visualizzare risultati query utilizzando le funzioni PHP 0
M Unire piu funzioni di una classe PHP 12
criric Mysqli funzioni . approccio OOP Snippet PHP 0
A la riga clonata non risponde alle funzioni javascript come la riga madre. Javascript 5
S funzioni ricorsive in loop jQuery 0
S Problema con le funzioni PHP 6
M lanciare due funzioni javascript dopo l'invio di un form Javascript 2

Discussioni simili