252 messaggi dal 03 novembre 2003
Buon giorno
da una funzione Javascript, chiamo un WebMethod in C#.
Il problema non è la chiamata del metodo e/o passaggio dati in Json,
ma la variabile Valore!
Riesco a vedere il valore ALERT(Valore)[ultima riga] solo al secondo click del pulsante.

Questa soluzione mi aiuterebbe con un click di un pulsante SALVA all'evento OnClientClick cui ritornerei un 'confirm' per proseguire il salvataggio dei dati.
Ma non riesco a gestirlo come vorrei!!

var request = {
                    N1: $('#txtNumberOne').val(),
                    N2: $('#txtNumberTwo').val(),
                    Operation: $('#MatOperation').val()
                };
                var strRequest = JSON.stringify(request);
                $.ajax({
                    url: 'JSon2.aspx/MethodLocation',
                    data: strRequest,
                    dataType: "json",
                    contentType: "application/json",
                    cache: false,
                    context: document.body,
                    type: 'POST',
                    success: function (response) {
                        Valore = response.d;
                    },
                    error: function (err) {
                        alert(err.statusText);
                    }
                });

                if (Valore != "") { alert(Valore); }

it's not difficult to write, but is difficult write that you mean
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Roberto,

roberto173 ha scritto.

Riesco a vedere il valore ALERT(Valore)[ultima riga] solo al secondo click del pulsante.

Esatto. Questo succede perché la tua istruzione alert(Valore) va in esecuzione prima che il browser abbia ottenuto una risposta alla richiesta ajax che ha inviato al server.
Al secondo click, tu stai di fatto leggendo il valore recuperato durante la prima richiesta.

Tieni presente che il metodo $.ajax non è bloccante, e quindi l'esecuzione proseguirà subito alla successiva istruzione if (Valore != "") , senza aspettare la risposta del server. E' per questo che devi assegnare delle funzioni di callback a success ed error, perché così jQuery ha la possibilità di mandarle in esecuzione più tardi, all'ottenimento di una risposta.

Secondo me dovresti mettere il tuo confirm all'interno della funzione che hai assegnato a success. Da lì, poi, simulerai un click sul bottone che causa il postback.

Ecco un esempio che usa lo stesso bottone sia per far aprire la conferma che per causare il postback. Il bottone assume uno stato diverso dopo la conferma dell'utente, e questo gli consente di lasciare che il postback abbia il suo corso.
http://jsfiddle.net/DNYz8/1/

ciao,
Moreno
Modificato da BrightSoul il 22 luglio 2014 00.14 -

Enjoy learning and just keep making
252 messaggi dal 03 novembre 2003
Ciao Moreno -
grazie per la tua risposta.
Interessantissimo l'esempio in jsfiddle.net

Il mio salvataggio dati è gestito da un asp:button
il quale ha un onClientClick con diversi controlli 'js' lato client (di cui ho dovuto aggiungere il controllo che vi ho indicato).

se tutto ha un return true.. viene generato l'evento onClick del button.

Il problema era appunto bloccare questo evento non solo per return false da controlli js, ma anche dall'aggiunta di 'confirm' da un controllo lato server con Ajax.

Anche se gestisco un confirm in success, anche se seleziono CANCEL, gli altri controlli 'js' proseguono per gestire il return finale.

Per ora ho lasciato da parte ajax e utilizzo il reload di un UpdatePanel con __doPostBack('myupdatepanel','');

e facendo così, posso solo far visualizzare il messaggio da server come ALERT (che poi uso Jquery Apprise)
Invece di usare confim in Ajax Client, lavoro su UpdatePanel e uso solo alert.


Comunque mi piacerebbe provare a replicare il codice nell'esempio che mi hai girato... sa mai che mi risolve un sacco di roba eheheh
Modificato da roberto173 il 22 luglio 2014 10.05 -

it's not difficult to write, but is difficult write that you mean
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Roberto,

roberto173 ha scritto:
Anche se gestisco un confirm in success, anche se seleziono CANCEL, gli altri controlli 'js' proseguono per gestire il return finale.
...
ha un onClientClick con diversi controlli 'js' lato client

Vuoi dire che nella tua pagina esistono altri gestori dell'evento click di quel bottone, oppure li hai messi tutti nell'onClientClick di quel bottone? Puoi fare un esempio?

Tieni presente che, oltre a restituire false, puoi (e dovresti) bloccare la propagazione dell'evento click con il metodo stopPropagation dell'oggetto Event.

Ho aggiornato il fiddle:
http://jsfiddle.net/DNYz8/2/

ciao,
Moreno

Enjoy learning and just keep making
252 messaggi dal 03 novembre 2003
Il pulsante in questione (e anche altri che devono eseguire stesso controllo lato server!) è gestito in questo modo schematico:


<asp:button id="MybuttonSave" runat="server"... 
onClientClick="if(Function1()==false){return false;} 
if(Function2()==false){return false} 
if(NewFunctionAjax()==false){return false;} return FunctionConfirmSave();"
onClick="SaveRequest" />



Nelle funzioni 'Function n' sono originali lato client!
La funzione 'NewFunctionAjax()' è quella nuova che deve verificare necessariamente dei valori lato Server in base a delle selezioni di altri valori nella pagina.

In questa funzione volevo mettere il confirm per far decidere l'utente se proseguire o meno. Un po come il risultato delle precedenti 'Function n'.

Ma capisco il problema della tempistica del ritorno dei valori lato server.
Così - invece di chiamare l'evento al click dei pulsante C#, lo eseguo con eventi onchange di drop e/o input type='button' per cambiare DIV di visualizzazione.
Usando quindi il __doPostBack aggiornando un UpdatePanel

Per ora va bene così... però sarebbe stato interessante gestire AJAX e JSON lato client

Appena riesco, farò una prova in un progetto locale mio in base a quello che mi hai indicato
Modificato da roberto173 il 23 luglio 2014 12.43 -
Modificato da roberto173 il 23 luglio 2014 12.43 -

it's not difficult to write, but is difficult write that you mean
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

roberto173 ha scritto:

Appena riesco, farò una prova in un progetto locale mio in base a quello che mi hai indicato

ok, fammi sapere come va :)

roberto173 ha scritto:
Nelle funzioni 'Function n' sono originali lato client!

Sì, ti mando giusto un esempio che ti aiuterà a condensare la sintassi, grazie alla short circuit evaluation del javascript.
onClientClick="return Function1() && Function2() && NewFunctionAjax() && FunctionConfirmSave()"

Ecco un esempio in cui si vede che le funzioni non vengono neanche eseguite se almeno una delle precedenti ha restituito false, in questa espressione booleana che coinvolge solo operatori &&.
http://jsfiddle.net/RVaVf/

FunctionConfirmSave() è necessaria, dato che la confirm era già nella callback assegnata al success?

ciao,
Moreno
Modificato da BrightSoul il 23 luglio 2014 22.35 -

Enjoy learning and just keep making
252 messaggi dal 03 novembre 2003
Ciao Moreno -
ottimo l'esempio chiamate funzioni JavaScript come hai indicato

Fai presente che quelle funzioni NON hanno nulla che richiami il success di Ajax - ma solo controlli su date, codice fiscale, valori vari impostati....
Alla fine, la funzione FunctionConfirmSave() ha - oltre altri controlli (funzione utile per altri button) un confirm per poter indicare Ok - Cancel dall'utente.
Se si clicca Annulla, l'evento OnCLick del pulsante, non viene eseguito.
Viceversa, viene chiamato l'evento in C# indicato ovviamente nell'OnClick

Questo è la base di tutto!!!

Tra le funzioni JS, avrei voluto mettere una ulteriore function che va a richiamare il metodo WebMethod in C# con AJAX -
Se trova delle condizioni tali (dopo interrogazioni Db) da avvisare l'utente, volevo fa apparire un CONFIRM a questo livello, in modo da bloccare i controlli successivi di altre funzioni JS chiamate -
Ovviamente da bollare quindi l'ultima funzione FunctionConfirmSave()

it's not difficult to write, but is difficult write that you mean

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.