Foros del Web » Programando para Internet » Javascript »

solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozilla?

Estas en el tema de solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozilla? en el foro de Javascript en Foros del Web. Hola gente, verán en mi web en la sección de opiniones se pueden subir opiniones e imágenes, http://www.buzonxalapa.com/opiniones...ar_opinion.php esto funciona bien en chrome pero en ...
  #1 (permalink)  
Antiguo 09/03/2012, 18:28
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozilla?

Hola gente,

verán en mi web en la sección de opiniones se pueden subir opiniones e imágenes,

http://www.buzonxalapa.com/opiniones...ar_opinion.php

esto funciona bien en chrome pero en ie y mozilla pasa algo raro,

cuando capturo bien todo el form, incluyendo el captcha, si guarda la opinion,

pero si dejo el espacio vacio del captcha o lo pongo mal se queda la imagen de loading, es decir, se queda en el ajax.readyState 1

en cambio en chrome si me dice que el captcha esta mal.

aca esta el script ajax:

Código:
function ajaxFunction(){
  var xmlHttp;
  
  try{
  	xmlHttp=new XMLHttpRequest();
    return xmlHttp;
  } 
  catch (e){
	  try{
      	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      	return xmlHttp;
      } 
	  catch (e){
      	try{
        	xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        	return xmlHttp;
		} 
		catch (e) {
        alert("Su navegador no soporta AJAX!");
        return false;
      	}
	  }
  }
}
function procesar_opinion(){

//recibo variables
	var autor_opinion= document.getElementById('autor_opinion').value;
	var email_opinion= document.getElementById('email_opinion').value;
	var fecha_opinion= document.getElementById('fecha_opinion').value;

//estas son las correspondientes al captcha
        var desafio = Recaptcha.get_challenge();
	var solucion = Recaptcha.get_response();

var ajax;
ajax= ajaxFunction();
										
ajax.open("GET", "procesar_opinion.php?recaptcha_challenge_field="+desafio+"&recaptcha_response_field="+solucion+"&autor_opinion="+autor_opinion+"&email_opinion="+email_opinion+"&fecha_opinion="+fecha_opinion, true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function() {
											
  if (ajax.readyState == 1){ //si el captcha esta mal o vació de aquí no pasa (mozilla o ie)
             document.getElementById('form_opinion').innerHTML= "<center><img src='loader.gif' alt='Procesando'><br><br> Procesando opinión, espere por favor...</center>";
  }
  if (ajax.readyState==4){ 
     if(ajax.status==200){
        var respuesta = ajax.responseText; //retorno incorrecto si el captcha es erroneo, aqui tambien puede estar el error, que no retorne bien esta variable en mozilla o ie
        if (respuesta.length == 0 || respuesta == null){ //si no hay respuesta error
            alert("Ocurrio un error en el envío, por favor contacte al administrador. Disculpe las Molestias");
        }
        else{
            if(respuesta=="incorrecto"){ //si el captacha esta mal el php devuelve incorrecto
              alert("Captcha incorrecto");
              Recaptcha.reload();
	    }
 	    else{ //si todo salio bien
               $('#form_opinion').hide(1000);
               $('#uploadify').show(1000);
	   }
        }
    }
  }
ajax.send(null);
}
y el php que valida es este:

Código PHP:
$resp recaptcha_check_answer ($privatekey,
                                
$_SERVER["REMOTE_ADDR"],
                                
$_GET["recaptcha_challenge_field"],
                                
$_GET["recaptcha_response_field"]);
if(!
$resp->is_valid){
    echo 
"incorrecto";  //si esta mal el captcha devuelve error
    
exit();
}
else{  
//si no inserta a la bd        
        
$autor_opinion=trim($_GET['autor_opinion']);
        
$email_opinion=trim($_GET['email_opinion']);
        
$fecha_opinion=trim($_GET['fecha_opinion']);
        
        
$sql_insert="Insert into opiniones (autor_op, email_op, fecha_op) values ('$autor_opinion', '$email_opinion', '$fecha_opinion')";
        
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
        echo 
"ok"//imprime ok para que no caiga en respuesta vacia y sea error
        
exit();

no se que este afectando para que ie y mozilla tengan problemas, chrome va ok, lo que me indica que el script esta bien, debe haber alguna configuración o que se yo que no este funcionando en los otros

les agradezco sus observaciones
  #2 (permalink)  
Antiguo 10/03/2012, 07:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozi

no sé cual es el problema, pero por intentar dar algo más de luz. en ff se hace la petición (llega al estado 200) y la respuesta es "incorrecto"
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 10/03/2012, 09:28
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozi

hola IsaBelM

si, mira
si la respuesta de la petición es "incorrecto" debería hacer:

Código:
if(respuesta=="incorrecto"){ 
  alert("Captcha incorrecto"); //mostrar el error y
  Recaptcha.reload(); //recargar el captcha
}
sin embargo se queda en el readyState 1 con la imagen del loading

solo cuando capturo todo bien pasa al:

Código:
else{ 
      $('#form_opinion').hide(1000); //escondo el formulario y 
      $('#uploadify').show(1000); //muestro la opción de cargar imágenes
}
como que no valida el response o no se que esta pasando, se cicla en el estado 1
  #4 (permalink)  
Antiguo 10/03/2012, 10:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozi

¡buenas!
empieza por corregir los errores evidentes. me explico, si miras la consola de firefox o firebug, verás algunos reportes de erorres. por ejemplo, intentas accesar a un elemento que no existe en el documento. por tanto, devuelve null. pero luego accesas a propiedades de null lo cual es lo que produce error y colapsa el script.
  #5 (permalink)  
Antiguo 10/03/2012, 13:50
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozi

que tal zerokilled, gracias por tu observación

ya vi los errores en la consola, no entiendo porque los interpreta así, el caso es que mejor quite la comprobación:

Código:
if (ajax.readyState == 1){
             document.getElementById('form_opinion').innerHTML= "<center><img src='loader.gif' alt='Procesando'><br><br> Procesando opinión, espere por favor...</center>";
  }
y ya funciona

aunque me queda la duda
  #6 (permalink)  
Antiguo 10/03/2012, 14:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: solo chrome ejecuta bien readyState y responseText, que pasa con ie y mozi

no tengo idea que exactamente estaba sucediendo. que conste que no trabajo con librerias. lo unico que hice fue ver la consola para ver si producia algun error evidente. cuando cargo el documento, busque el elemento y me devolvia la referencia correcta. pero cuando se presiona enviar es cuando deja de exisitir el elemento. supongo que alguna manipulacion estas haciendo al documento.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: ajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:43.