Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/04/2014, 11:45
Qazser
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Ajax php y mysql

Cita:
Iniciado por Qazser Ver Mensaje
jajaja no, está bien.

Para hacerlo tiempo real del todo necesitarias otro lenguaje, como node...o usar sockets php, como ratchet (rollazo)

Peeeeero hay una solución que en 10 minutos se pone. Y se llama short polling.
Ojo, está función añade una carga adicional a tu servidor que se multiplica expotencialmente por cada usuario que la visita simultaneamente, pero es lo que hay.

La técnica es la siguiente, un código jquery o ajax o como quieras llamarlo preguntará de manera asíncrona cada 10 segundos al servidor si hay informaciones nuevas, el responderá si o no.

Vas a hacer unos cuantos cambios. ¿Puedes subir el archivo pagina_foto?

Te lo explico por encima: Vas a tener que separar la función que saca los datos del html, en la base de datos mysql vas a añadir una columna de ultima modificacion, que será un DATETIME.

La función debe reconocer si alguien la abre normal o mediante AJAX, para eso, yo tengo un código que uso en mis webs

Código PHP:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
            
$this->is_ajax TRUE;
        else
            
$this->is_ajax FALSE
Ahora, si eso devuelve TRUE, tu pagina_foto.php tiene que hacer la consulta a la base de datos y devolver los datos en formato JSON. Si no es true pues que siga como siempre.

El código ajax es, pues un jquery que saco ahora, pero tiene que ser personalizado a tus necesitades, pues si reconoce cambios debe cambiar el DOM con las cosas nuevas.

Otra cosa, si no quieres volver a tocar, se me acaba de ocurrir que puedes crear un archivo nuevo que tenga simplemente el IF de arriba, la query que saca la información y devuelva el resultado en formado json. Es menos limpio porque se duplica la query pero lo tendrás terminado antes.

En la query del archivo nuevo, tienes que añadir una condición WHERE que dice que lo que busque sea lastmodified menor a 5 segundos

Código HTML:
(function pollServerForNewMail() {
  $.getJSON('/poll_newmail.php', function (response) {
    if (response.newMail) {
      alert(
        "You have received a letter, good sir. " + 
        "I will have a quick lie-down and be on my way shortly."
      );
    }
    setTimeout(pollServerForMail, 5000);
  });
}());
Esta es una funcion jquery que muestra cada 5 segundos un alert si recibe como respuesta (en formato json ) un array response->newmail->true.