ajax recibir daros

Iniciado por jalbtercero, 22 Mayo 2016, 22:01 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

Sobre lo que comentas que se vuelve lento al momento de cargar es por que En cada envio de mensaje vuelves a leer todos los mensajes existentes la base de datos:

Código (php) [Seleccionar]
    $result = mysqli_query($link, 'SELECT * FROM chat');

    while ($fila = mysqli_fetch_array($result)) {
        echo mostrarDatos($fila, $color);
    }


Esa funcion mostrarDatos te devuelve todos los datos y es lo que madas de regreso al ajax..

Offtopic para chiste geek.
CitarSu nombre es Francis, saco lo de Ajax del javascript....

Como te decia En cada actualizacion lees todos los mensajes otra vez y los vuelves a colocar en la ventana

Código (javascript) [Seleccionar]
$('#contenedor').empty().append( content );

Podrias simplemente llevar un registro de cual es el ultimo mensaje recivido por el usuario X y en el SQL del chat solo pedir los mensjaes que sean mayor que el ultimo dato mandado y listo,

Un buen lugar para guardar ese dato es en la cookie o en el session del php aunque opciones hay muchas. puedes delegarlo al cliente y que te lo mande con cada consulta ajax y actualizar la variable desde el javascrip cada que reciva elementos nuevos.

Entonces al recibitlos puede hacerles append normal sobre el div sin necesidad de actualizarlo todo.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

gAb1

Haciendo eso no serviria para tiempo real, porque si entran dos usuarios a la web y sin recargar la página pondrían mensajes y cada uno solo vería sus propios mensajes y no los de los demás hasta que no recargaran.

Para producción hay varias cosas que se podrían mejorar bastante:

Primero ese script estaría llamando mil veces la misma función y reventaria el servidor cuando hayan varios usuarios online. Para solucionarlo se mueve el while dentro de la función, llamandola 1 vez pasandole como arguamento el fetch array:

Código (php) [Seleccionar]
function mostrarDatos($result, $color) {
    while ($fila = mysqli_fetch_array($result)) {
       
    }
}

$result = mysqli_query($link, 'SELECT * FROM chat');

echo mostrarDatos($result, $color);


De igual modo no veo necesidad para una función...

Para tiempo real, habria que hacer que jquery hiciera una petición cada X segundos (5 como mínimo) y que comprobara si hay nuevos mensajes. Para empezar habria que enumerarlos con un id y usar ese id para saber cual es el ultimo mensaje y mostrar los ids que falten.

jalbtercero

Muchas gracias por la aclaracion pero no te preocupes, ya tenia un script en ajax que cada segundo esta actualizando el div donde se encuentra el chat

Saludos

jalbtercero

#13
gAb1 Vulevo a probar he implementar tu codigo:


Mira dejemos el lado estetico de lado, El script que has "comprimido no va bien", es decir cada vez que entro al chat se envia un mensaje vacio, si pongo el boton como <a> no pasa nada, la funcion, valgame la redundancia, no funciona, y ya para terminar el scroll (de la demo), no va bien, porque no baja del todo, a veces se queda arriba, otras veces solo baja un poco..

Despues he modificado mi pagina y he puesto el scroll, pero solo me lo hace 1 vez, que es cuando entra a la pagina y me envia el mensaje vacio: las otras veces me dice:

Uncaught TypeError: Cannot read property 'top' of undefined


(anonymous function)   @   enviar.js:12
i   @   jquery.min.js:2
j.fireWith   @   jquery.min.js:2
z   @   jquery.min.js:4
(anonymous function)   @   jquery.min.js:4



Saludos.

gAb1

#14
A ver por partes:

Si el script que he hecho no funcionase bien, no funcionaria en ninguna parte, sin embargo está funcionando (menos lo del scroll) perfectamente:

- La función se activa ya sea cuando le das a intro o click al boton <a>. En ningún otro momento se debería activar (a menos que la llames desde otra parte).
- Se puede comprobar en la demo.

¿Por qué dices entonces que no funciona bien? Si no está funcionando en tu página, eso es algo a parte y no es culpa mia. Habrá que encontrar el fallo.

Si cada vez que entras al chat se envia un mensaje vacio, revisa bien que estás haciendo porque el código que yo he escrito no hace nada de eso.

El problema del scroll ya te lo dije en tu otra pregunta y que esperes a que alguien sepa como arreglarlo. No es necesario que me lo recuerdes...

Ahora hay que tratar de localizar que es lo que está provocando que al entrar al chat se envie un mensaje en vacio.

Para no permitir enviar mensajes vacios:

Código (javascript) [Seleccionar]
if (mensaje == '') {
   alert('Debes escribir un mensaje!');
   return false;
}


En el link a la demo de esta respuesta se incluye esto, incluyelo en la función y mira si se sigue enviando el mensaje en blanco. Si sigue ocurriendo entonces es algo totalmente ajeno a la función, pero si ya no ocurre entonces quiere decir que en algún lado de tu página estás llamando a la función myFunction().

Haz un poco de debug y descubrirás que está ocurriendo en tu página. Si no logras descubrir donde está el fallo, muestranos todo el código y se intentará localizar el fallo y solucionarlo.


Edito: Se me olvido comentarte: A parte de la comprobación de mensaje vacio también hay otro cambio al actualizar el div, en la demo lo verás, cambia la linea que tienes por $('#final').before( content ); Esto lo que hace es mostrar los mensajes en el orden correcto.

daniela Vega

Creas DIV con el id "recargado" donde vas a llamar el resultado de un archivo PHP, que podría ser la invocación a una base de datos, un mensaje, validación, prácticamente cualquier cosa que hag PHP y porsupuesto sin recargar la página

<div id="recargado">Mi texto sin recargar</div>
<p align="center">
    <a href="#" onclick="javascript:recargar();">recargar</a>
</p>


incluyes la libreria jquery
<script language="javascript" src="js/jquery-1.2.6.min.js"></script>


Escribes el código que se ejecutará cuando demos click al link "recargar"
<script language="javascript">
function recargar(){   
       /// Aqui podemos enviarle alguna variable a nuestro script PHP
    var variable_post="Mi texto recargado";
       /// Invocamos a nuestro script PHP
    $.post("miscript.php", { variable: variable_post }, function(data){
       /// Ponemos la respuesta de nuestro script en el DIV recargado
    $("#recargado").html(data);
    });         
}
</script>