Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/05/2011, 17:23
jdlfuente
 
Fecha de Ingreso: octubre-2007
Mensajes: 12
Antigüedad: 16 años, 6 meses
Puntos: 1
problema con ajax

hola tengo el siguiente problema
tengo un formulario donde relice un script en ajax para ir validando cada dato paasando el id del campo el valor y la capa div donde quiero me responda
el problema es que aveces no fucniona bien y coloque un aleetb para ir viendo los estados 0,1,2,3,4 y de la propiedad readyState pero me reponde y vuelve a quedar abierta la peticion osea EN UNO
QUE SERA LE ENVIO EL CODIGO PARA QUE VEAN

como puedo mandar varias petitciones las voy guardando en una cola para que se ejecuten en teoria en el orden que se van haciendo las peticiones





var cache = new Array();
var xmlHttp = CreaAjax();



// la función maneja la validación para todos los campos del formulario
function validatefield(fieldID,inputValue,capaRta)
{

// sólo continúa si xmlHttp no está vacío
if (xmlHttp)
{


if (fieldID)
{

fieldID = encodeURIComponent(fieldID);

var cacheEntry = cache.push("valor=" + inputValue + "&id_campo=" + fieldID);




if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0)
{

// configura un nuevo set de parámetros desde el cache
cacheEntry = cache.shift(); // quito del array q no hay amspeticiones pentientes

var url ="validarPersona.php";
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange = function (){
if(xmlHttp.readyState == 4){ // readyState== 4 el seridor ya respondio a la peticion
if(xmlHttp.status == 200){

document.getElementById(capaRta).innerHTML= xmlHttp.responseText; // algo pasa aqui parece

}
else{

alert('ocurrio un error'+xmlHttp.statusText);
}
}
else{
alert('cargando ........'+xmlHttp.readyState);
}


}
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=ISO-8859-1");


var parametro = 'validacionAjax';
var valores = cacheEntry +'&parametro='+ parametro;

xmlHttp.send(valores);
}


}

}
}

Y EL PHP les pasdo uan parte tiene muchos campos pero asi seria

$idCampo = trim($_POST['id_campo']);
$valor = trim($_POST['valor']);




$parametro = $_POST['parametro'];
if($parametro == 'validacionAjax'){



if($parametro == 'validacionAjax'){
$b= 1;

switch($idCampo){


case 'apellido': $res = ValidateFields::ValidarNombrePersona($valor);
if($res['estado'] === false){

echo $res['mensaje'];


}






break;
case 'nombre' : $res = ValidateFields::ValidarNombrePersona($valor);
if($res['estado'] === false){

echo $res['mensaje'];

}

break;
}


el html

la llamada la hago asi
<input type='text' id='nombre' name='nombre' size='21' tabindex="2" onBlur="validatefield(this.id,this.value,'RtaNombr e')">
*
<div id="RtaNombre" class="CajaValidaciones"> </div>

resumen el error es que queda el estado ready state en 1 cuando termina nos e por que y aveces no se ejecuta en el orden que le hago las peticiones a pesar que los voy guardando en una cola a las peticiones y controla antes de enviar que el estado sea 0 o 4 y que tenga unma petición por lo menos

gracias se los agradeceria es medio urgente ya que tengo que terminar un modulo que empece con esto
de ante mano mil gracias a todos