Originariamente inviato da homezappa
Dagli un provotto:
codice:
function inviaPOST(pagina, dati, id_elem, id_span) {
if (ajax) {
// inizializzo la richiesta in post
ajax.open("post", pagina, true);
// imposto il giusto header
ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
ajax.setRequestHeader("connection", "close")
// effettuo la richiesta inviando i dati formati da coppie chiave-valore
// dati = escape(dati);
ajax.send(dati);
ajax.onreadystatechange = function() {
if(ajax.readyState === 4) {
if(ajax.status == 200) {
var risposta = ajax.responseText;
if (risposta != '') {
prendiElementoDaId(id_elem).className = 'textbox2';
cambiaTesto(id_span, risposta);
}else{
prendiElementoDaId(id_elem).className = 'textbox1';
cambiaTesto(id_span, '');
}
}else{
alert("Operazione fallita, errore numero " + ajax.status);
return null;
}
}
}
}
}
Attenzione alla funzione inviaPOST(pagina, dati, id_elem, id_span): ha due parametri in più!
HTH
Zappa
Grazie dell'aiuto, così funziona correttamente, solo che volevo avere due funzioni distinte per usare inviaPOST anche altre volte per altri scopi.
Comunque adesso ho scoperto in cosa consiste l'errore ma non so come risolverlo, mi puoi aiutare?
Ora ho fatto così e ho aggiunto un alert() per testare:
codice:
if (ajax) {
// inizializzo la richiesta in post
ajax.open("post", pagina, true);
// imposto il giusto header
ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
ajax.setRequestHeader("connection", "close")
// effettuo la richiesta inviando i dati formati da coppie chiave-valore
// dati = escape(dati);
ajax.send(dati);
ajax.onreadystatechange = function() {
if (ajax.readyState === 4)
if(ajax.status == 200) {
var risposta = decodeURIComponent(ajax.responseText);
alert(risposta); // questo alert mi mostra il valore giusto
return risposta;
}else{
alert("Operazione fallita, errore numero " + ajax.status);
return null;
}
}
}
function controlloErrore(id_elem, id_span) {
var risposta = null;
risposta = inviaPOST('controllo.php', 'azione='+id_elem + '&' + id_elem+'='+prendiElementoDaId(id_elem).value);
alert(risposta); // questo alert mi mostra "undefined"
if (risposta) {
if (risposta != '') {
prendiElementoDaId(id_elemento).className = 'textbox2';
cambiaTesto(id_span, risposta);
}else{
prendiElementoDaId(id_elemento).className = 'textbox1';
cambiaTesto(id_span, '');
}
}
return risposta;
}
Mettendo i due alert che vedi ho notato che l'alert della funzione controlloErrore appare immediatamente (con scritto "undefined") e dopo 1 o 2 secondi appare l'alert della prima funzione (con scritto il valore corretto).
In pratica la funzione controlloErrore non aspetta la risposta di inviaPOST e agisce immediatamente, prima che venga eseguito:
codice:
ajax.onreadystatechange = function() {
if (ajax.readyState === 4)
if(ajax.status == 200) {
var risposta = decodeURIComponent(ajax.responseText);
alert(risposta); // questo alert mi mostra il valore giusto
return risposta;
Come risolvere?