Io purtroppo non me ne intendo molto di Ajax però quando l'ho usato all'inizio non mi andava perchè c'erano problemi di tempi nella risposta, di chiamate sincrone e asincrone. Se vuoi ti posto il codice che uso io per inviare dati in POST con ajax così puoi confrontarlo, poi qualcun'altro più competente ti potrà dire dove sbagli e spiegarti meglio come funziona.
Ecco il codice del file js che includo io:
codice:
var ajax = assegnaXMLHttpRequest();
//
// funzione per assegnare l'oggetto XMLHttpRequest compatibile con i browsers più recenti e diffusi
//
function assegnaXMLHttpRequest() {
// lista delle variabili locali
var
// variabile di ritorno, nulla di default
XHR = null,
// informazioni sul nome del browser
browserUtente = navigator.userAgent.toUpperCase();
// browser standard con supporto nativo
// non importa il tipo di browser
if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
XHR = new XMLHttpRequest();
// browser Internet Explorer
// è necessario filtrare la versione 4
else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0 ) {
// la versione 6 di IE ha un nome differente
// per il tipo di oggetto ActiveX
if(browserUtente.indexOf("MSIE 5") < 0)
XHR = new ActiveXObject("Msxml2.XMLHTTP");
// le versioni 5 e 5.5 invece sfruttano lo stesso nome
else
XHR = new ActiveXObject("Microsoft.XMLHTTP");
}
return XHR;
}
//
// funzione per inviare dati col metodo post ad un'altra pagina
//
function inviaPOST(pagina, dati, callback) {
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)
return callback(ajax.responseText);
else{
//alert("Operazione fallita, errore numero " + ajax.status);
return null;
}
}
}
}
per inviare i dati e ottenere la risposta assegni a un evento di un oggetto nella pagina con il form:
codice:
inviaPOST('pagina_che_esegue_il_controllo.php', 'variabile_a=valore_a', function(risposta){
// se l'invio ha funzionato
if (risposta) {
// qui scrivi il codice che controlla la risposta
}
else // se l'invio non ha funzionato
return true;
});