2010-05-11 24 views

Respuesta

1

Deberá sondear continuamente una página que tenga el valor de la base de datos.

+0

No necesariamente. Hay técnicas de inserción disponibles. –

+1

@RobertHarvey ¿Cómo? puedes dar tal? –

2

Enganche un procedimiento almacenado especial en su base de datos que avisa a su aplicación después de una modificación. Necesitará un módulo personalizado y las declaraciones de activación correctas.

Su otra opción es sondear.

+0

¿Cómo alertaría a la aplicación, que está en el navegador del cliente? –

+0

La aplicación consta de dos partes: en el navegador y en el servidor web. El servicio web backend es responsable de hablar con la base de datos a menos que asker use el estilo .0000001% de hacer que el navegador hable SQL a una base de datos. –

+0

+1 para una forma de evitar el "sondeo de la base de datos", incluso si no evita el "sondeo de cliente a servidor" –

5

El servidor (base de datos/web) no puede iniciar una conexión, solo el cliente puede hacerlo. Entonces tendrá que sondear la base de datos hasta que haya una actualización. Puede crear un servicio web que verifique la base de datos y que jQuery use.

Edit: Me erraron corregido. Es posible mantener abierta una conexión AJAX hasta que el servidor "empuje" datos hacia ella. Ver: http://en.wikipedia.org/wiki/Reverse_Ajax

Y aparentemente, realmente es sondeo: http://en.wikipedia.org/wiki/Push_technology#Long_polling. Si el servidor aún no tiene datos para enviar, mantiene la conexión abierta hasta que lo haga. No es una tecnología de empuje "pura", porque el cliente no tiene un puerto de escucha al que se conecta el servidor. El efecto es similar, sin embargo.

Editar 2: Así que volviendo a responder a su pregunta ... Deberá elegir cómo "sondear" el servicio web. El servicio web debería verificar la base de datos para ver si hay actualizaciones. Verificar la base de datos en busca de actualizaciones podría ser la más complicada y realmente depende de sus requisitos. Puede ejecutar una consulta SQL para ver si algo cambió, pero ¿cómo lo sabría? Necesitarías algún tipo de parámetro (normalmente una fecha) para comparar. Si lo hace mal, puede perder algunas actualizaciones o tener múltiples visitas para una actualización. Lo que dijo Autocracy sería una buena forma de recibir notificaciones de actualizaciones. Puede mantener esa lista en la base de datos, en la memoria, etc. y borrarla cuando el cliente reciba las actualizaciones.

0

Básicamente, tendrá que sondear constantemente el servidor para ver los cambios en la base de datos. El servidor no puede hacer una llamada al cliente, por lo que el cliente tendrá que preguntarle constantemente al servidor si ha habido cambios.

+0

Consulte http://en.wikipedia.org/wiki/Reverse_Ajax –

1

Sugeriría crear una página HTML que use setIntreval() para hacer llamadas AJAX repetidamente a un script PHP que consulte su base de datos. Puede usar JSON y PEAR para facilitar la tarea.

Enlaces de referencia:

+0

. Muchas gracias. ¡Tu método funciona perfectamente! Simplemente no puedo configurar el intervalo demasiado bajo o hay problemas con la apertura/cierre de los lectores de datos. –

11

Lo que está describiendo se llama coloquialmente programación Comet. Comet describe un grupo de técnicas para enviar contenido a una página web con una conexión HTTP persistente.

La inserción se iniciará utilizando una combinación de disparador/procedimiento almacenado en el servidor de la base de datos. De esta forma, ocurre sin importar de dónde provenga la actualización de datos.

+1

Lo tienes. Wikipedia (http://en.wikipedia.org/wiki/Comet_%28programming%29): Comet ... es conocido por varios otros nombres, incluidos Ajax Push, Ajax inverso, bidireccional, HTTP Streaming y HTTP empuje del servidor entre otros. –

+0

Esto suena muy bien. Tendre que echarle un vistazo. ¡Gracias por el consejo! –

+2

por ejemplo http://www.ape-project.org/ – choise

3

estoy haciendo casi lo mismo con una charla, vuelve a cargar un script php cada xx seg.

se ve así: reemplazar j con $ si no se usa jquery.noconflict ..

j(".chatref").everyTime(3000,function(i){ 
    j.ajax({ 
     url: "chatx.php", 
     cache: false, 
     success: function(updated){ 
      j(".chatref").html(updated); 
      ...do stuff.. 
     } 
    }); 

Este es un método muy agradable, creo :) si desea enviar vars a chatx.php sólo tiene que añadir ? php & x = 1 & y = 2?>

Cuestiones relacionadas