Para enviar un formulario, yo uso las dos siguientes funciones:
Código:
function enviarFormulario(url, formid, divid)
{
cargando(divid);
var Formulario = document.getElementById(formid);
var longitudFormulario = Formulario.elements.length;
var cadenaFormulario = "";
var sepCampos = "";
var valor = "";
for (var i=0; i < longitudFormulario; i++)
{
valor = Formulario.elements[i].value;
valor = escape(valor);
cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+valor;
sepCampos = "&";
}
var peticion = nuevoAjax();
peticion.open("POST", url, true);
peticion.onreadystatechange = function()
{
if (peticion.readyState == 4)
{
if (peticion.status == 200 && !peticion.error)
{
var obj = document.getElementById(divid);
txt=unescape(peticion.responseText);
obj.innerHTML = txt;
$('#form-msg').css('display','block');
}
else
{
var obj = document.getElementById(divid);
obj.innerHTML = 'Se ha producido un error inesperado. Intentelo más tarde';
$('#form-msg').css('display','block');
}
}
}
peticion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
peticion.send(cadenaFormulario);
return false;
}
function nuevoAjax() {
if (window.XMLHttpRequest)
{
// Si es Mozilla, Safari etc
return new XMLHttpRequest ();
//alert('Selected XMLHttpRequest');
}
else if (window.ActiveXObject)
{
// pero si es IE
try
{
return new ActiveXObject ("Msxml2.XMLHTTP");
//alert('Selected Msxml2.XMLHTTP');
}
catch (e)
{
// en caso que sea una versión antigua
try
{
return new ActiveXObject ("Microsoft.XMLHTTP");
//alert('Selected Microsoft.XMLHTTP');
}
catch (e)
{
}
}
}
else {
return false;
}
}
En tu código, no veo peticion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1"); (creo que hace falta :D)