Estoy teniendo un poco de pesadilla aquí, por lo que cualquier ayuda sería gratamente apreciada. En primer lugar, explicaré lo que estoy tratando de hacer:jQuery Long Polling (con servidor PHP)
Estoy tratando de implementar un sistema como el descrito aquí: https://stackoverflow.com/a/1086448/1034392 en mi servidor MAMP local usando el framework Yii. Tengo una función que comprueba si hay nuevas notificaciones en la base de datos; si es así, las analiza y json las codifica. Tengo esta función llamada en un ciclo while cada 5 segundos.
Así: va a la/usuario/unreadNotifications desencadena la siguiente
Yii::log('test'); // to check it's getting called
$this->layout=false;
header('Content-Type: application/json');
// LONG POLLING
while (Yii::app()->user->getNotifications() == null) {
sleep(5);
}
echo Yii::app()->user->getNotifications(); // prints out json if new notification
Yii::app()->end();
return;
Esto funciona bien - ido al enlace en el navegador y verificado respuesta JSON - todo bien.
He intentado todo tipo de cosas jQuery para que funcione ... La ÚNICA forma en que he encontrado que funciona es usando $.ajax
con el tipo POST pero SÓLO cuando hay una notificación de espera (por lo que se devuelve algo de json). $.get
o $.post
se "cancela" (se muestra en firebug) pero se llama a la URL (porque puedo ver que el archivo de registro está actualizado) - impar.
Mi configuración original utilizando $.get
es:
<script type="text/javascript">
function notificationPoll() {
$.get('<?php echo Yii::app()->createUrl('user/unreadNotifications') ?>','', function(result) {
$.each(result.events, function(events) {
alert('New Notification!');
});
notificationPoll();
}, 'json');
}
</script>
<script type="text/javascript">
$(document).ready(function() {
$.ajaxSetup({
timeout: 60 //set a global ajax timeout of a minute
});
notificationPoll();
});
</script>
Esto se pone "abortado" por alguna razón. Lo he intentado con 'jsonp' aunque no es una solicitud de CORS ... pero tampoco funciona.
Parece que no se puede ir a ninguna parte con esto! ¿Alguien puede participar?
Muchas gracias
Se olvidó de mencionar: cuando uso $ .ajax con tipo POST y NO hay que mostrar ninguna notificación, cualquier página de sitio que tenga el código jQuery solo no se carga hasta que se reciba una notificación. –
Error de registro de consola ?? pegarlo .. –