Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Forzar redirección desde archivo php ejecutado por ajax

Estas en el tema de Forzar redirección desde archivo php ejecutado por ajax en el foro de PHP en Foros del Web. Hola señores a los tiempos que vuelvo por acá. Espero puedan ayudarme con algo que no me está funcionando. Paso a explicar: Tengo un archivo ...
  #1 (permalink)  
Antiguo 22/02/2014, 05:12
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Pregunta Forzar redirección desde archivo php ejecutado por ajax

Hola señores a los tiempos que vuelvo por acá. Espero puedan ayudarme con algo que no me está funcionando. Paso a explicar:

Tengo un archivo ajax.js que contiene lo siguiente:

Código HTML:
function ajax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}


function login() {

var user = document.getElementById('user').value;
var pass = document.getElementById('password').value;
var loginDiv = document.getElementById('infoLogin');
ajax = ajax();

ajax.open("GET", "/checkLogin.php?user="+user+"&pass="+pass);
loginDiv.innerHTML = '<div>Estamos iniciando la conexión<br><img style="padding: 10px; width: 100px;" src="loading.gif"></div>';
ajax.onreadystatechange = function() {
if (ajax.readyState == 4) {
loginDiv.innerHTML = ajax.responseText;

}
}
ajax.send(null)

}

El contenido de mi archivo checkLogin.php es un mero validador que responde según lo ingresado por el usuario cuestiones como esta vacio el campo user, esta vacio el campo password, o sus datos son correctos, etc. Hasta aquí todo bien, funciona perfecto.


Código PHP:
<?
        $email
=trim(utf8_decode($_GET['user']));
        
$pass=trim(utf8_decode($_GET['pass']));
        
        if(empty(
$email) OR empty($pass)){

           echo 
'El campo usuario o contraseña está vacio';
        }
        
        elseif(!
filter_var($emailFILTER_VALIDATE_EMAIL)){ 
        
        echo 
'En el campo e-mail, no ha ingresado un e-mail válido';
        
        } else {

        include 
'conexion.php';
        
$checkuser mysql_query("SELECT * FROM XXX WHERE email='$email' AND pass='$pass' COLLATE utf8_bin"$link);
        
$username_exist mysql_num_rows($checkuser);

            if(
$username_exist==0) {

                echo 
'El usuario no existe o la contrase&ntilde;a es incorrecta';

            } else {

                while(
$row mysql_fetch_array($checkuser)) {
                

                
setcookie(//creo cookies);
                
        
echo 'Datos son correctos<br>Serás redirigido al home en 3 segundos';
 

                }
                                                        
        echo 
"<script type=\"text/javascript\">window.top.location.href=\"domainCheckCookie.php?xxx=".$valorcookie."&xxx1=".$valorcookie."&xxx3=".valorcookie."\";</script>";
        
echo 
"<meta http-equiv=\"Refresh\" content=\"3;url=domainCheckCookie.php?xxx=".$valorcookie."&xxx1=".$valorcookie."&xxx3=".valorcookie.">";
                

            }

        }
        
?>

El problema es que cuando del archivo .php invocado por ajax se obtiene un correcto login, este debería redireccionar a una pagina de incio. Lo he intentado con meta y con java de la siguiente forma:


Código HTML:
echo "<meta http-equiv=\"Refresh\" content=\"3;url=url">";

echo "<script type=\"text/javascript\">window.top.location.href=\"url\";</script>";
Debo recalcar que en java lo he intentado con todas las demas posibilidaddes como document.location.href, etc, etc... por ahí no va el problema.

El uso de la meta sólo me funciona en google chrome y va perfecto, pero no en los demás navegadores.


Ahora esa url a donde intento redireccionar, es una url que se va formando en el proceso de validación y que lleva información valiosa a otra página donde por medio de esos datos, también se crean cookies de sesión, es decir con un login el usuario se logueo en dos sitios.

He estado leyendo sobre el problema y me dicen que debo tratar la respuesta ajax para que esta me permita crear un script de redirección, pero no logro hacerlo.

Ojo no deseo redireccionar desde ajax, sino mediante la ejecución del script php.
La pregunta es: ¿Cómo hago para que ajax perimita dicha redirección desde el archivo .php?

Saludos...

Última edición por manuel__7; 22/02/2014 a las 05:24
  #2 (permalink)  
Antiguo 22/02/2014, 08:37
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

url debiera ser una variable o una url para que funcione, no sé a donde te redirige chrome si la ubicación es solo "url"

P.D. Javascript no es lo mismo que Java, la única similitud es por las 4 letras.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 22/02/2014, 10:21
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por Triby Ver Mensaje
url debiera ser una variable o una url para que funcione, no sé a donde te redirige chrome si la ubicación es solo "url"

P.D. Javascript no es lo mismo que Java, la única similitud es por las 4 letras.
Tienes razon no son lo mismo solo lo hice por abreviar... pero bueno asumelo como javascript... y obvio que donde va url va una url real... solo puse el codigo con reemplazos para no extenderlo... url es una url como www.algo.com... El problema es xq no permite la redirección que crea el archivo php... Algo me explicaron de que en el archivo ajax debo trabjar ese permiso para que el archivo php pueda ejecutar un script pero no logro aplicarlo...

Para que me entiendan mejor:

La pagina de login se conecta con ajax, ajax concecta con php, habiendo sido positiva la validación php debe redireccionar a otro dominio con variables obtenidos del registro y este nuevo dominio una vez que obtiene la información que obtuvo via url envia al usuario a la página de inicio del Dominio principal, quedando el usuario logueado en dos sitios.

Todo se encuentra magnifico el único problema es que en internet explorer y en firefox, la redirección que ejecuta el archivo php no se cumple.

Última edición por manuel__7; 22/02/2014 a las 10:33
  #4 (permalink)  
Antiguo 22/02/2014, 11:39
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

En tu php estás devolviendo código javascript. Usualmente cualquier código javascript devuelto por php hacia un ajax, no hará nada si no lo ejecutas en javascript, por ejemplo con eval()
  #5 (permalink)  
Antiguo 22/02/2014, 13:34
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Pregunta Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por ocp001a Ver Mensaje
En tu php estás devolviendo código javascript. Usualmente cualquier código javascript devuelto por php hacia un ajax, no hará nada si no lo ejecutas en javascript, por ejemplo con eval()
Como debo utilizar eval en mi código si tengo que rediredionar a una url tipo:

http://cccccc.net/domainCheckCookie.php?i=".variablephp."&p=".variab lephp."&type=".variablephp

una noción de como se utiliza...?
  #6 (permalink)  
Antiguo 22/02/2014, 13:44
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

antes tienes que validar si esta logeado y todo eso

si no lo esta que devuelva un cero algo asi para diferenciarlo

cuando devuelves la url lo redireccionas

ahi si te sirve el la redireccion con javascript.

jajajaja llegue de los ultimos me llevo los apausos xD
  #7 (permalink)  
Antiguo 22/02/2014, 13:51
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por __SDP__ Ver Mensaje
antes tienes que validar si esta logeado y todo eso

si no lo esta que devuelva un cero algo asi para diferenciarlo

cuando devuelves la url lo redireccionas

ahi si te sirve el la redireccion con javascript.

jajajaja llegue de los ultimos me llevo los apausos xD
Pero eso seria psandole nuevamente un response a ajax y tendria que pasarle la url con las variables creadas...por eso lo mejor es que directamente el archivo php ejecute la redirección debe haber alguna manera de hacer un force!...


Respecto a lo de eval intente esto:

Código HTML:
<script type="text/javascript">eval(window.location.href="http://ssss.net/domainCheckCookie.php?i=".variablephp."&p=".variablephp."&dd=variablephp");</script> 

pero no funciona!... .(
  #8 (permalink)  
Antiguo 22/02/2014, 13:59
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

entiendo lo que dices, pero no es la idea de poner codigo javascript en un archivo php, cuando usas ajax, se ve feo mesclando todo.

  #9 (permalink)  
Antiguo 22/02/2014, 14:02
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por __SDP__ Ver Mensaje
entiendo lo que dices, pero no es la idea de poner codigo javascript en un archivo php, cuando usas ajax, se ve feo mesclando todo.


Bueno y como haria para pasarle la url con las variables a ajax para que ajax sea el que redireccione???
  #10 (permalink)  
Antiguo 22/02/2014, 14:10
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Y en vez de javascript, no redireccionad con php?
Código PHP:
Ver original
  1. header("Location: asdf.php?var=".$var."&foo=".$foo);
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #11 (permalink)  
Antiguo 22/02/2014, 14:12
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

direccion desde php

echo "http://ssss.net/domainCheckCookie.php?i=".$variablephp."&p=".varia blephp."&dd"=$variablephp;


javascript lo recibe,
window.location.href = ajax.responseText;
  #12 (permalink)  
Antiguo 22/02/2014, 14:14
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por xSkArx Ver Mensaje
Y en vez de javascript, no redireccionad con php?
Código PHP:
Ver original
  1. header("Location: asdf.php?var=".$var."&foo=".$foo);
Si lo he intentado pero no me funciona tampoco... Es como que ajax no acepta los envios de redirección!....


Es perfecto ___SDP___ ahora una pregunta más: Puedo interactuar con Ajax por ejemplo enviandole valores para que responda de cierta forma???

ejemplo si no se llenó bien el formulario enviarle un no y comprobarlo asi:

if(ajax.responseText== 'no') {

echo 'no llenó correctamente el registro';

}



Eso se puede???

Última edición por manuel__7; 22/02/2014 a las 14:34
  #13 (permalink)  
Antiguo 22/02/2014, 14:35
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por __SDP__ Ver Mensaje
direccion desde php

echo "http://ssss.net/domainCheckCookie.php?i=".$variablephp."&p=".varia blephp."&dd"=$variablephp;


javascript lo recibe,
window.location.href = ajax.responseText;

Es perfecto ___SDP___ ahora una pregunta más: Puedo interactuar con Ajax por ejemplo enviandole valores para que responda de cierta forma???

ejemplo si no se llenó bien el formulario enviarle un no y comprobarlo asi:

Código HTML:
if(ajax.responseText== 'no') {

loginDiv.innerHTML = 'no llenó correctamente el registro';

}

Se puede?




Bueno me autorespondo... Si se puede y funciona perfecto... Saludos y muchas gracias a todos... Buen día... Saludos...

Última edición por manuel__7; 22/02/2014 a las 14:50
  #14 (permalink)  
Antiguo 24/02/2014, 13:25
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

El problema radica en lo siguiente:

Las redirecciones en php sólo funcionan cuando no se ha mandado nada a pantalla, por ejemplo, imagina un link enviado por email para confirmar un registro:

www.miweb.com/confirma.php?id=9849849

Código PHP:
Ver original
  1. <?php
  2. //....proceso de confirmacion y validado
  3. if($registro=='valido')
  4.     header("Location: index.php");//redirecciono al usuario al indice, sin haber enviado nada a pantalla previamente
  5. else
  6.     echo "Mensaje de error";

Tu petición ajax se hace cuando la página ya tiene contenido, por tanto la redirección desde php ya no funciona.

Además, no puedes devolver con php un código javascript que se ejecute en automático, lo que devuelvas debe ser previamente interpretado por javascript (cliente)

Entonces, desde php debes devolver o bien un código javacript para que tu procesador de la respuesta ajax la ejecute, o bien, si sabes que php no devolverá más que una url o un error, podrías en tu lado del javascript tener una función que si no tienes error redirija hacia ahí.

Código Javascript:
Ver original
  1. if(respuesta!='0')
  2.      location.href=respuesta;
  3. else
  4.     alert('Mensaje de error');
  #15 (permalink)  
Antiguo 24/02/2014, 21:05
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Forzar redirección desde archivo php ejecutado por ajax

Cita:
Iniciado por ocp001a Ver Mensaje
El problema radica en lo siguiente:

Las redirecciones en php sólo funcionan cuando no se ha mandado nada a pantalla, por ejemplo, imagina un link enviado por email para confirmar un registro:

[url]www.miweb.com/confirma.php?id=9849849[/url]

Código PHP:
Ver original
  1. <?php
  2. //....proceso de confirmacion y validado
  3. if($registro=='valido')
  4.     header("Location: index.php");//redirecciono al usuario al indice, sin haber enviado nada a pantalla previamente
  5. else
  6.     echo "Mensaje de error";

Tu petición ajax se hace cuando la página ya tiene contenido, por tanto la redirección desde php ya no funciona.

Además, no puedes devolver con php un código javascript que se ejecute en automático, lo que devuelvas debe ser previamente interpretado por javascript (cliente)

Entonces, desde php debes devolver o bien un código javacript para que tu procesador de la respuesta ajax la ejecute, o bien, si sabes que php no devolverá más que una url o un error, podrías en tu lado del javascript tener una función que si no tienes error redirija hacia ahí.

Código Javascript:
Ver original
  1. if(respuesta!='0')
  2.      location.href=respuesta;
  3. else
  4.     alert('Mensaje de error');


Entiendo muchas gracias... Ya lo solucione utilizando la respuesta de php directamente en ajax... Saludos...

Etiquetas: ajax, html
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 00:26.