Ciao, partiamo dal fatto che quelle due funzioni sono ciascuna un callback del metodo $.post (sostanzialmente una chiamata AJAX), il quale esegue appunto la propria funzione in modo asincrono. Il primo argomento di quei callback è un PlainObject elaborato in base a ciò che il server restituisce.
Fai attenzione ai nomi che stai usando per definire le variabili somma1 e somma2 fuori dalle funzioni e quelli usati per definire l'argomento di ciascuna delle due funzioni. Definendo un argomento di una funzione viene automaticamente creata una variabile locale, quindi visibile solo dentro quella tale funzione. Le variabili locali ovviamente vanno a sovrascrivere (o meglio ad "oscurare", per il principio detto "scope shadowing") il valore di quelle esterne (o globali) con lo stesso nome.
Questo significa che la variabile esterna "somma1" non viene mai valorizzata, perché dentro la funzione tu stai definendo una seconda variabile "somma1" come argomento della funzione stessa; anche se hanno lo stesso nome si tratta di due variabili (cioè due namespace) differenti, perché definite in due ambiti diversi.
Inoltre non mi è chiaro in che modo sia eseguita ciascuna delle due funzioni, perché di fatto le due chiamate stanno dentro due diverse condizioni. Questo significa che ciascuna delle due funzioni viene richiamata in tempi e circostanze differenti.
Ora, se si ha la certezza che la seconda funzione è richiamata dopo la prima, puoi risolvere usando dei nomi differenti tra le variabili esterne e quelle locali, quindi passare, la dove ti serve, i valori restituiti dalle funzioni alle variabili esterne (in particolare per somma1):
codice:
var somma1;
if(tp==1){
//somma in tempo reale
$.post("totale.php", { v1: $('#impReddA').val(), v2: $('#impAltriReddA').val()},
function(rispostaServer) { // rispostaServer è la variabile locale dove viene passata la risposta del server
somma1 = rispostaServer; // passo il valore alla variabile esterna
$('#impReddComplA').val(somma1);
$("#impTotaleReddComplA").val(somma1);
});
}
if(tp==2){
$.post("totale.php", { v4: $('#impConA').val(), v5: $('#impConAltriReddA').val()},
function(rispostaServer) { // rispostaServer anche qui è una variabile locale visibile solo dentro questa funzione
$('#impConReddComplA').val(rispostaServer);
$("#impTotaleReddComplA").val(+rispostaServer+somma1); // il + iniziale serve per convertire rispostaServer in numero prima di eseguire la somma aritmetica, altrimenti si avrebbe una concatenazione di stringhe
});
}
.
In alternativa puoi recuperare quel valore che già hai passato al val() di #impReddComplA, senza bisogno quindi di usare ulteriori variabili esterne:
codice:
if(tp==1){
//somma in tempo reale
$.post("totale.php", { v1: $('#impReddA').val(), v2: $('#impAltriReddA').val()},
function(rispostaServer) {
$('#impReddComplA').val(rispostaServer);
$("#impTotaleReddComplA").val(rispostaServer);
});
}
if(tp==2){
$.post("totale.php", { v4: $('#impConA').val(), v5: $('#impConAltriReddA').val()},
function(rispostaServer) {
$('#impConReddComplA').val(rispostaServer);
var somma1 = +$('#impReddComplA').val(); // recupero il valore della precedente somma
$("#impTotaleReddComplA").val(+rispostaServer+somma1);
});
}
.
Fai sapere se può andare e se sono riuscito a chiarirti qualche dubbio.