entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Porque este codigo no funciona en safari?

Hola, tengo un codigo que extrae informacion de un xml y crea elementos div con esos datos, me funciona perfectamente en firefox y chrome pero en safari no crea los elementos con los datos pero si pide la peticion al archivo xml. Este es el codigo:

function loadchat(dataidf){
$.get("http://m2s.es/app/api/chat.xml?id="+dataidf,{},function(xml){
$('message',xml).each(function() {
etiqueta=$(this).children();
etiqueta=etiqueta[0].nodeName.toLowerCase();
id = $(this).find('id').text(); 
#Ahora irian mas busquedas de etiquetas como la anterior
datosmem = crearmsmd(id,username,iduser,imgr,textmsm,locat,leido,fecha,me,stick,tableid);
#Llamamos a la funcion para crear los elementos con los datos
$('.'+'comment').prepend(datosmem);
#Ponemos los datos en el div con clase 'comment' a la inversa (De abajo a arriba)
}); 
}); 
function crearmsmd(id,username,iduser,imgr,textmsm,locat,leido,fecha,me,stick,tableid){
msm ='<div id="'+id+'" class="sms">';
#Assignamos el id del div para saber si existe y no repetirlo
msm+= '' #Aqui iria mas codigo dentro del div
if($('#'+id).length){}else{ 
#Aqui detectamos si el elemento existe y si no exito lo devolvemos a la funcion anterior
 return msm;
} }

0voto

Leonardo-Tadei comentado

Hola Jaume,

podrías pasarnos una llamada válida a http://m2s.es/app/api/chat.xml?id= ... para poder probar el código?

Si ponés un XML estático con datos de pruebas (pero que tenga la misma estructura que uno real) también vale.

0voto

Jaumesv comentado

Es que solo funciona si has iniciado sesion en la app. Entra primero en http://m2s.es/app y inicia sesion con: Usuario: [email protected] Password:123 y luego puedes usar como llamada:
http://m2s.es/app/api/chat.xml?id=0

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola Jaume,

no estoy pudiendo probar el código :-(
Desde el navegador (FF) la llamada funciona bien después de haberme logueado, pero desde el mismo navegador ejecuto el código JavaScript y obtengo un HTTP 302 (redirección) con lo que $.get() no está recibiendo nada.

Podrá ser que bajos ciertas condiciones el sitio responda directamente y en otras que responda con una redirección? Estás usando un CDN?

Tal vez el error en Safari esté relacionado con esto, al no seguir adelante con el $.get() luego de obtener un HTTP 302.

Este es el código que estoy usando:

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta name="generator" content="Bluefish 2.2.3" />
<meta name="author" content="leo" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" >

function loadchat(dataidf){
console.log('entro con '+dataidf);

    $.get("http://m2s.es/app/api/chat.xml?id="+dataidf,{},function(xml){
console.log('entro');
console.log(xml);
    $('message',xml).each(function() {
    etiqueta=$(this).children();
    etiqueta=etiqueta[0].nodeName.toLowerCase();
    id = $(this).find('id').text(); 
    //Ahora irian mas busquedas de etiquetas como la anterior
    datosmem = crearmsmd(id,username,iduser,imgr,textmsm,locat,leido,fecha,me,stick,tableid);
    //Llamamos a la funcion para crear los elementos con los datos
    $('.'+'comment').prepend(datosmem);
    //Ponemos los datos en el div con clase 'comment' a la inversa (De abajo a arriba)
    }); 
    }).fail(function(jqXHR, textStatus, errorThrown) {
                console.log('Status: '+textStatus);         
        });
}

function crearmsmd(id,username,iduser,imgr,textmsm,locat,leido,fecha,me,stick,tableid){
    msm ='<div id="'+id+'" class="sms">';
    //Assignamos el id del div para saber si existe y no repetirlo
    msm+= ''; //#Aqui iria mas codigo dentro del div
    if($('#'+id).length){}else{ 
    //Aqui detectamos si el elemento existe y si no exito lo devolvemos a la funcion anterior
     return msm;
    } 
}
</script>
</head>
<body>
   <a href="javascript:loadchat(0);">Traer datos</a>
   <hr />
   <div class="comment">@</div>
</body>
</html>

0voto

Jaumesv comentado

Cuando el usuario no tiene la sesion abierta redirige al login, pero solo si pasa eso. No se porque te redirige a ti o si le da error la extraccion de datos desde la mysql
Igualmente acabo de quitar todas las redirecciones del xml y sigue sin funcionar, puede ser el include que tengo?

0voto

Leonardo-Tadei comentado

No es un error de MySQL, porque la petición redirije a otro lugar con HTTP 302, así que si vos no programaste un header() que emita ese error, se está produciendo a nivel del servidor web, sin llegar al intérprete PHP.

Podrá ser que el método $.get() de JQuery no esté enviando los datos de la sesión, y por tanto mi petición es redirigida otro lugar, como al login? Depende la generación del XML de la sesión? En mi caso, como estoy corriendo el código de pruebas en local, como no coincide el nombre de dominio, el valor de PHPSESSID no coincide.

Intentá debuguear el valor de la sesión, por ejemplo poniéndola como comentario en la salida XML de las peticiones, para ver si es este el motivo.

Saludos!

0voto

Jaumesv comentado

Ya he puesto el valor de la sesion al principio del xml, pero igualmente si no hay sesion el xml quedaria vacio y no se redirigiria.
Tambien puedes probar cerrando la sesion y poniendo estos gets en el xml:

http://m2s.es/app/api/chat.xml?id=0&user=test&pass=123

0voto

Leonardo-Tadei comentado

Entrando dede http://m2s.es/app/api/chat.xml?id=0&user=test&pass=123 en mi script ya no obtengo un HTTP 302.

Devuelve HTTP 200 pero con contenido vacío :-(

Tal vez a mi simple prueba le falte algo de tu código original. Me gustaría que la revises para ver si a vos te funciona en FF y en Chrome... creo que será una fuente de información interesante.

Para pruebas está bien pasarse user y pass, pero para producción, de tener quever con esto el problema, enviate el SESSION_ID y en chat.xml iniciá la sesión con el ID de la sesión que recibís como parámetro, de forma tal de no enviar datos sensibles por GET.

Seguimos!

0voto

Jaumesv comentado

Pues a mi me funciona perfectamente en firefox, con sesion o con get. Ya se que no parece muy seguro pasar la contraseña por get, de todos modos ya lo he corregido y he codificado las contraseñas. Ahora la url del xml es:

http://m2s.es/app/api/chat.xml?id=0&user=test&pass=202cb962ac59075b964b07152d234b70

Yo he probado tu codigo de prueba y a mi tambien me pasa a veces pero lo vuelvo a intentar y ya lo muestra, creo que es por el host que a veces es muy lento;
Pero ya me funciona en safari lo he editado un poco respecto al anterior, he cambiado el .each por un for en javascript, tenia esto:

fecha = $(etiqueta).find('fecha').html(); 

y se ve que el problema era el .html(), lo he cambiado por .text()

0voto

Leonardo-Tadei comentado

Genial!

Me alegra que lo hayas resuelto: me ahorraste isntalarme un Safari en una máquina virtual para verlo en ese entorno... por acá nadie bootea MS Windows ni MacOS hace años.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta