Foros del Web » Programando para Internet » Javascript »

Abrir ventana (no pop-up) desde AJAX

Estas en el tema de Abrir ventana (no pop-up) desde AJAX en el foro de Javascript en Foros del Web. Hola, en mi web tengo enlaces que -por diferentes motivos- paso a AJAX , es decir los mando a un .js y luego de ahí ...
  #1 (permalink)  
Antiguo 20/02/2012, 03:28
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Abrir ventana (no pop-up) desde AJAX

Hola, en mi web tengo enlaces que -por diferentes motivos- paso a AJAX, es decir los mando a un .js y luego de ahí al PHP. Es algo así como un enlace que pasa como parámetro otro enlace.

Después de hacer algunas cosas con el enlace que recojo en AJAX tengo que abrir una ventana nueva precisamente con el enlace que he recogido.

El tema de lanzar la ventana lo podría hacer de 2 formas (creo yo):

1ª.- Desde el .js. Imposible porque lo hago con window.open() y el navegador me bloquea todo el rato el pop-up y al parecer no hay solución para eso.

2ª.- Desde el .php que interviene en el AJAX con header location. Es correcta esta opción? Se podría hacer? Rompo con alguna regla lógica de programación?

Hay alguna otra forma de hacerlo?
  #2 (permalink)  
Antiguo 20/02/2012, 06:11
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Abrir ventana (no pop-up) desde AJAX

tu la primera aseveración no es totalmente cierta
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 20/02/2012, 07:43
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: Abrir ventana (no pop-up) desde AJAX

Pues según me han dicho en otro mensaje aquí mismo y tb según dicen en los comentarios sobre bloquedo de pop-ups que aparecen en el link que me indicas, no es posible burlar el bloqueo de pop-ups.

Por otro lado he probado la 2ª opción -incluyendo header-location dentro del php del AJAX- y no me va...

Última edición por humanista; 20/02/2012 a las 08:07
  #4 (permalink)  
Antiguo 20/02/2012, 09:41
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Abrir ventana (no pop-up) desde AJAX

olvida los comentarios y lee el apartado "una última observación" o mejor aún, pruebalo tu mismo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 20/02/2012, 13:24
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: Abrir ventana (no pop-up) desde AJAX

Para abrir un popup de esa manera y que no sea bloqueado, lo que hay que hacer es abrir la ventana durante el onclick, aunque esté vacía. Luego, una vez obtenida la respuesta ajax, podemos escribir la misma en la ventana abierta (o cerrarla si es necesario):
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script>
function 
http(){
    if(
typeof window.XMLHttpRequest!='undefined'){
        return new 
XMLHttpRequest();    
    }else{
        try{
            return new 
ActiveXObject('Microsoft.XMLHTTP');
        }catch(
e){
            
alert('Su navegador no soporta AJAX');
            return 
false;
        }    
    }    
}
function 
request(url,callback,params){
    var 
H=new http();
    if(!
H)return;
    
H.open('post',url+'?'+Math.random(),true);
    
H.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    
H.onreadystatechange=function(){
        if(
H.readyState==4){
            
callback(H.responseText);
            
H.onreadystatechange=function(){}
            
H.abort();
            
H=null;
        }
    }
    var 
p='';
    for(var 
i in params){
        
p+='&'+i+'='+escape(params[i]);    
    }
    
H.send(p);
}
function 
abrir(){
    var 
a=window.open('','','width=500,height=500');
    
request('uno.html',function(r){
            
a.document.open();
            
a.document.write(r);
            
a.document.close();
    },{})
}
</script>
</head>

<body>
<div style="width:150px; border:1px solid #000; background:orange; text-align:center; line-height:30px; cursor:pointer" onclick="abrir()">abrir</div>
</body>
</html> 
Si en uno.html tenemos escrito:
Código PHP:
<h1>Hola</h1
Aparecerá ese hola escrito en la ventana secundaria.
Otra alternativa es usar ventanas tipo lightbox.


Ahora, algo más parecido a lo que decís necesitar. Imaginate que en uno.html dice esto:
Código PHP:
http://forosdelweb.com 
Si lo que necesitás es redirigir a esa url obtenida vía AJAX, con esto bastaría:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script>
function 
http(){
    if(
typeof window.XMLHttpRequest!='undefined'){
        return new 
XMLHttpRequest();    
    }else{
        try{
            return new 
ActiveXObject('Microsoft.XMLHTTP');
        }catch(
e){
            
alert('Su navegador no soporta AJAX');
            return 
false;
        }    
    }    
}
function 
request(url,callback,params){
    var 
H=new http();
    if(!
H)return;
    
H.open('post',url+'?'+Math.random(),true);
    
H.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    
H.onreadystatechange=function(){
        if(
H.readyState==4){
            
callback(H.responseText);
            
H.onreadystatechange=function(){}
            
H.abort();
            
H=null;
        }
    }
    var 
p='';
    for(var 
i in params){
        
p+='&'+i+'='+escape(params[i]);    
    }
    
H.send(p);
}
function 
abrir(){
    var 
a=window.open('','','width=500,height=500');
    
request('uno.html',function(r){
            
a.location=r;
    },{})
}
</script>
</head>

<body>
<div style="width:150px; border:1px solid #000; background:orange; text-align:center; line-height:30px; cursor:pointer" onclick="abrir()">abrir</div>
</body>
</html> 

Última edición por Panino5001; 20/02/2012 a las 13:35
  #6 (permalink)  
Antiguo 20/02/2012, 14:57
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: Abrir ventana (no pop-up) desde AJAX

Cita:
Iniciado por humanista Ver Mensaje
Pues según me han dicho en otro mensaje aquí mismo y tb según dicen en los comentarios sobre bloquedo de pop-ups que aparecen en el link que me indicas, no es posible burlar el bloqueo de pop-ups.
ciertamente mencioné que no es posible burlar el bloqueo, pero aclaré que solo se activan si es por petición del usuario. tu situación parece ser que intentas abrir la ventana por el evento onreadystatechange de XMLHttpRequest, el cual dicho evento no es iniciado por el usuario. http://www.forosdelweb.com/showthread.php?p=4123016. en fin, el código de @panino muestra perfectamente como debes hacer.

Etiquetas: ajax, pop-up, ventanas
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 09:36.