Tengo un formulario sencillo el cual le estoy validando los campos con ajax y php. Lo que hace es que al salir del input este envía la petición de validación, mientras pone un texto de "Validando...", y luego entrega el mensaje de error y vuelve a colocar el valor en el input.
El problema ocurre en IE (v7), y la verdad no siempre, ya que el 90% del tiempo lo hace bien, pero a veces se congela en la parte de "Validando...", y mi única opción es refrescar la página. Esto lo probé con Mozilla mil veces y me funcionó bien al 100%.
Alguien me puede ayudar por favor, ya que no tengo ninguna pista de porqué ocurrirá esto.
Acá pongo el código sobre un solo input a modo de ejemplo, ya que todos los otros los hago de la misma forma:
Input:
Código PHP:
Nombre:<br>
<input value="" maxlength="40" type="text" size="35" name="inpName" id="inpName" onblur="vldName()"> <br>
<div class="" id="error_nombre"></div>
Código PHP:
//AJAX
function newAjaxUser() {
var xmlhttp=false;
try
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); //navegadores no IE
}
catch(e)
{
try
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); //para IE
}
catch(E) { xmlhttp=false; }
}
if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); }
return xmlhttp;
}
//valida nombre
function vldName() {
var divMensaje=document.getElementById("error_nombre");
var input=document.getElementById("inpName");
var valor=input.value;
var textoAccion="Validando...";
input.disabled=true;
input.value=textoAccion;
//ajax
var ajax=newAjaxUser();
ajax.open("POST", "user_auth_fns.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send("name="+valor);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
input.value=valor;
input.disabled=false;
var response = ajax.responseText;
if (response == 0) {
divMensaje.innerHTML='<font color="#ff0000">Nombre no válido</font>';
} else if (response == 1) {
divMensaje.innerHTML='Nombre válido';
}
}
}
}
Código PHP:
if (isset($_POST["name"])) {
if (!ereg("^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÏ\ ]{2,40}$",$name))
echo "1";
else
echo "0";
}