Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Xajax + document.write()

Estas en el tema de Xajax + document.write() en el foro de Frameworks JS en Foros del Web. Hola, soy usuario de Xajax desde hace algo más de un año, aunque nunca he llegado a utilizarlo en profundidad. Lo que quiero realizar no ...
  #1 (permalink)  
Antiguo 21/08/2008, 12:22
 
Fecha de Ingreso: junio-2006
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Xajax + document.write()

Hola, soy usuario de Xajax desde hace algo más de un año, aunque nunca he llegado a utilizarlo en profundidad.

Lo que quiero realizar no se si es posible, y es que a través de una llamada con Xajax al servidor me pinte entre otras cosas un banner publicitario (en este caso de ImpresionesWeb, aunque he probado también con TradeDoubler).

Lo vemos más fácil en un ejemplo:

Código PHP:
function cargaEstadisticas($jor,$IDcompeticion,$capaDestino) {
    
$respuesta = new xajaxResponse();
    
$salida estadisticas($jor,$IDcompeticion);
    
    
$publicidadIW 
    
'<div id="publicidadIW468x60" style="margin-top:10px">CAPA IMPRESIONESWEB - A continuacion deberia ir Banner 468x60:<br>
        <script language="javascript"  type="text/javascript">
            iw_ad_ancho=468;
            iw_ad_alto=60;
            iw_ad_formato="ad_468x60";
            iw_ad_cad="xxxxxxxxxxxxxxxxxxxx";
            iwsrcplus="code.impresionesweb.com/r/banner_iw.php?idrotador=xxxyyy&tamano=468x60&lgid="+((new Date()).getTime() % 2147483648) + Math.random();
            document.write("<scr"+"ipt language=javascript  type=text/javascript src=\""+iwsrcplus+"\"></scr"+"ipt>");
        </script>
        <noscript><iframe src="alt.impresionesweb.com/noscript.php?tam=468x60&idp=xxxyyy&ref=zzzyyy&cod=xxxyyy" width="468" height="60" frameborder="0" marginheight="0" marginwidth="0" scrolling="no"></iframe></noscript>
    </div>'
;
    
    
$respuesta->assign($capaDestino,"innerHTML",$salida.$publicidadIW);                     
    
    return 
$respuesta;
    

Cuando realizo la llamada a esta función me devuelve y me pinta todo el código HTML, incluido el contenido de la variable $publicidadIW, pero no me pinta el banner.
Imagino que lo que está pasando es que la respuesta sólo pinta lo que hay entre los <script> y </script>, pero no ejecuta su contenido.

He probado también a llamar a ese trozo de Javascript usando la función xajax script(), pero esto me saca el banner en una nueva ventana en blanco, y el navegador se queda leyendo indefinidamente.

También hay que tener en cuenta que hay que andar con cuidado ya que está terminantemente prohibido modificar los códigos publicitarios, y no se hasta que punto se pueden realizar pruebas.

A ver si alguien me ofrece alguna pista. Un saludo

Última edición por Lapreferente.com; 01/07/2009 a las 11:52
  #2 (permalink)  
Antiguo 21/08/2008, 12:56
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Xajax + ImpresionesWeb

Hola Lapreferente.com

dentor del objeto xajax tienes un metodo que permite interpretar codigo javascript eso es:

$respuesta->addScript("codigo javascript");

en tu caso seria algo como:

$respuesta->addScript('iw_ad_ancho=468;
iw_ad_alto=60;
iw_ad_formato="ad_468x60";
iw_ad_cad="cfdb4b2cd4367012bc7efee9b6c81736";
iwsrcplus="http://code.impresionesweb.com/r/banner_iw.php?idrotador=16223&tamano=468x60&lgid=" +((new Date()).getTime() % 2147483648) + Math.random();
document.write("<scr"+"ipt language=javascript type=text/javascript src=\""+iwsrcplus+"\"></scr"+"ipt>");
');

pero revisa la documentacion de xajax para la version que estas utilizando con respecto al metodo que te indique.
__________________
My path is lit by my own fire, I only go where I desire
  #3 (permalink)  
Antiguo 21/08/2008, 15:43
 
Fecha de Ingreso: junio-2006
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Xajax + ImpresionesWeb

Hola, ante todo gracias por tu ayuda.

Eso que propones ya lo había probado también, en la versión 0.5 de xajax se usa la función script($codigoJS).

Pongo un ejemplo con un banner de TradeDoubler:

Código PHP:
function cargaEstadisticas($jor,$IDcompeticion,$capaDestino) {
    
$respuesta = new xajaxResponse();
    
$salida estadisticas($jor,$IDcompeticion);
    
    
$codigoJScript '
var uri = \'http://impes.tradedoubler.com/imp?type(img)g(189727)a(976233)\' + new String (Math.random()).substring (2, 11);
document.write(\'<a href="http://clk.tradedoubler.com/click?p=17770&a=976233&g=189727" target="_BLANK"><img src="\'+uri+\'" border=0></a>\');'
;    
 
$respuesta->assign($capaDestino,"innerHTML",$salida.'<div>');                     
    
$respuesta->script($codigoJScript);
$respuesta->append($capaDestino,"innerHTML",'</div>');                     
    
    return 
$respuesta;
    

Al llamar a la función xajax sigue sin mostrarse el banner. La función script() ejecuta bien la primera línea (declaración de variable uri), pero se ve que no le gusta el document.write(....). Se da la circunstancia de que todos los banners tienen en su código un document.write.

Cualquier pista será bien recibida. Gracias
  #4 (permalink)  
Antiguo 21/08/2008, 16:12
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Xajax + ImpresionesWeb

Hola, probe el codigo javascript en una pagina aparte y el firebug me tira un error de sintaxis en el doctype, es decir en el codigo html que devuelve de la peticion que haces....
quiza quieras verificar que el banner que quieres cargar, en realidad carga.....
__________________
My path is lit by my own fire, I only go where I desire
  #5 (permalink)  
Antiguo 21/08/2008, 16:16
 
Fecha de Ingreso: junio-2006
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Xajax + ImpresionesWeb

Hola, bueno, quizás me haya equivocado al pegar aquí el código del banner, pero de todas formas, te confirmo que el código que devuelve la petición ajax carga correctamente cuando se llama directamente (sin Ajax).

Lo máximo que he conseguido es que el banner se muestre correctamente, pero lo hace en una nueva página en blanco (tan sólo aparece el banner) y machaca la anterior.

He buscado información sobre el tema, y efectivamente el problema está en los document.write que devuelven las peticiones Ajax.

Aquí un poco de información por si alguien se encuentra con mi mismo problema:

http://www.forosdelweb.com/f77/banners-con-ajax-418235/
http://www.sitepoint.com/forums/showthread.php?t=374716

No he encontrado nada que realmente me de una solución. No obstante creo que esta frase es bastante significativa:

Cita:
Any document.write after the page has finished loading will overwrite the whole page. You need to use innerHTML or DOM calls to update an existing page.
  #6 (permalink)  
Antiguo 21/08/2008, 16:26
 
Fecha de Ingreso: junio-2006
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Xajax + document.write()

Hola de nuevo, al final yo sólo he llegado a la solución. Como puse en mi anterior post, el truco está en quitar los document.write de las respuestas Ajax.

En mi caso las he sustituido por document.getElementById(nombreDiv).innerHTML

Pongo el código completo de la función Xajax:
Código PHP:
function cargaEstadisticas($jor,$IDcompeticion,$capaDestino) {
    
$respuesta = new xajaxResponse();
    
$salida estadisticas($jor,$IDcompeticion);
    
    
$codigoJScript '
var uri = \'impes.tradedoubler.com/imp?type(img)g(xxxyyy)a(xxxyyy)\' + new String (Math.random()).substring (2, 11);
document.getElementById(\'tradedoubler\').innerHTML=\'<a href="clk.tradedoubler.com/click?p=xxxyyy&a=zzzyyy&g=xxxyyy7" target="_BLANK"><img src="\'+uri+\'" border=0></a>\';'
;
    
    
    
$respuesta->assign($capaDestino,"innerHTML",$salida.'<div id="tradedoubler">');                         
    
$respuesta->append($capaDestino,"innerHTML",'</div>');                     
    
$respuesta->script($codigoJScript);    
    
    return 
$respuesta;
    

PROBLEMA: Tengo entendido que este tipo de compañías de intercambio de publicidad tienen terminantemente prohibido la modificación del código que ellos proporcionan. Vamos, que sólo puedes hacer un copiar/pegar en tu web.

En mi caso, este código ha sido alterado y no se si podría considerarse fraudulento.

Contactaré con ImpresionesWeb a ver que me dicen.

Última edición por Lapreferente.com; 01/07/2009 a las 11:56
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 20:38.