Autor
|
Tema: long polling ajax no esta funcionando bien (Leído 5,106 veces)
|
geshiro
Desconectado
Mensajes: 178
|
lo hace este script es que cuando cambio algo en la base de datos automaticamente se refleja en el sitio solo que cuando agrego un elemento a la base de datos cada ves tengo que recargar la pagina como pudiera hacer para solucionar esto? otra cosa en mi timestamp en la consola de google chrome parece asi http://localhost/storelte/notify/pusher?timestamp=1493076211 pending pero al agregar el nuevo elemento no cambia el timestamp porq no lo hace automatico tengo que recargar para verlo no se que estoy haciendo mal en el ajax , $(function(doc, win, $) { var has_focus = true; var notification = win.Notification || win.mozNotification || win.webkitNotification; var $badge = $("#notifications-badge"); var $list = $("#notifications-list"); var $button = $("#notifications-button"); URL_GET_NOTIFICATION = BASE_URL + 'notify/pusher'; URL_GET_NOTIFICATION_UPDATE = BASE_URL + 'notify/update'; if ('undefined' === typeof notification) { console.log('Web notification not supported'); } else { notification.requestPermission(function(permission) {}); } function check_notifications(timestamp) { $.ajax({ type: 'GET', url: URL_GET_NOTIFICATION, data: { timestamp : timestamp }, dataType: 'json', async: true, success: function (data) { for (var i in data.notifications) { notify(data.notifications[i].message, data.notifications[i].type, data.notifications[i].timestamp); } check_notifications(data.timestamp); } }); } function notify(message, type, created_at) { var type_txt = 'info'; var url = '#'; var icon = 'info-circle'; if (type == 0) { type_txt = 'success'; icon = 'check'; } else if (type == 1) { type_txt = 'info'; icon = 'exclamation'; } else if (type == 2) { type_txt = 'warning'; icon = 'exclamation-triangle'; } else if (type == 3 || type == 4) { type_txt = 'danger'; icon = 'fire'; } $badge.show(); $badge.text(parseInt($badge.text()) + 1); $list.find(".item").eq(13).nextAll(".item").remove(); var item = '<li class="item text-' + type_txt + '"><a href="' + url + '"><span class="text-' + type_txt + '">' + '<i class="fa fa-' + icon + ' fa-fw"></i> ' + message.substr(0, 22) + '</span>' + '<span class="pull-right text-muted small" data-time="' + created_at + '">X</span></a></li>' + '<li class="item divider"></li>'; $list.prepend(item); $('.dropdown.open .dropdown-toggle').dropdown('toggle'); return true; } $(win).on("blur", function () { has_focus = false; }); $(win).on("focus", function () { has_focus = true; }); $button.on("click", function () { $badge.fadeOut(300, function () { $badge.text(0); }); $list.find("span[data-time]").each(function (index) { var $this = $(this); $this.text(moment.unix($this.data('time')).fromNow()); }); }); check_notifications(); }(document, window, jQuery)); $('#notifications-button').on('click', function () { $.ajax({ type: 'GET', url: 'http://localhost/storelte/notify/update', success: function(data){ } }); });
|
|
|
En línea
|
|
|
|
engel lex
|
el ajax cada cuanto tiempo se llama?
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
geshiro
Desconectado
Mensajes: 178
|
lo dejo abierto en espera de un cambio en la base de datos y en google chrome me lo deja asi pusher?timestamp=1493077051 (pending) xhr jQuery-2.1.4.min.js:4 0 B Pending
|
|
« Última modificación: 25 Abril 2017, 01:37 am por geshiro »
|
En línea
|
|
|
|
engel lex
|
no veo el error, del todo, puedes colocar una captura de tu consola? para ver que peticiones hizo antes
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
engel lex
|
el servidor te está dejando en visto XD
que back end tienes? un php normal?
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
geshiro
Desconectado
Mensajes: 178
|
en backend tengo php con codeigniter, lo que pasa es que cuando inserto una notificacion desde mysql deberia ser vista en la web sin recargar ese es el problema q no lo esta haciendo porq tengo q recargar public function pusher(){ $data = $this->session->userdata('log'); $user_id = $data['id']; header('Content-Type: application/json'); while (true) { $firstCall = false; if ($this->input->get('timestamp')) { $last_ajax_call = $this->input->get('timestamp'); }else{ $last_ajax_call = time(); $firstCall = true; } $notificationsCount = $this->notification->checkForNotifications($user_id, $last_ajax_call); $newData = (int) $notificationsCount > 0 ? true : false; $notifications = []; if ($newData) { $dataSet = $this->notification->getNotifications($user_id, $last_ajax_call); foreach ($dataSet as $value) { $notifications[] = $value; $finalNotificationTime = $value['timestamp']; } $result = array('notifications' => $notifications, 'timestamp' => $finalNotificationTime); echo $json; break; }else{ if ($firstCall) { $dataSet = $this->notification->getUnreadNotifications($user_id); foreach ($dataSet as $value) { $notifications[] = $value; } $result = array('notifications' => $notifications, 'timestamp' => $last_ajax_call); echo $json; break; } continue; } } }
|
|
« Última modificación: 25 Abril 2017, 02:06 am por geshiro »
|
En línea
|
|
|
|
engel lex
|
set_time_limit(0) while(true) exit() sleep(1)
que es eso geshiro!? eso solo se usa casi que para debug... (excepto time limit que se usa para largas data frame, y aquí no es el caso)
lo unico que te altó fue error_reporting(0)
no se para que tienes ese while ahí, para mi está pegado en ese while, cuantas veces se va a repetir ese get si nunca debería repetirse, si se manda data se mando y adiós! no es socket, es htttp
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
geshiro
Desconectado
Mensajes: 178
|
set_time_limit(0) Limitamos el tiempo máximo de ejecución para que el sleep solo de 1s while(true) un ciclo infinito que en ves que estar pidiendo request cada 3s o 5s lo hize infinito con un estado de pending exit() terminamos el ciclo infinito sleep(1) delays de 1s es lo mas cerca que pude hacer al websocket ya que short polling me iba a hacer request cada 3s o 5s para que lo hize long polling cuando se haga una alteracion a la base de datos , con un efecto similar al websocket pero es http {"notifications":[{"user_id":"1","notification_id":"105","timestamp":"1493078569","id":"105","product_id":"4232","message":"1","type":"1","created_at":"1493078569","status":null}],"timestamp":1493080187}
y este json es lo que me regresa el ciclo
|
|
« Última modificación: 25 Abril 2017, 02:30 am por geshiro »
|
En línea
|
|
|
|
engel lex
|
eeehm no... es http... ahí no hay socket... cada conexión cierra estado, cada script tiene su propia data estatica...
por eso se pega... a demás... aunque fuera socket, no estás dando salida a los datos... echo solo pasa la data a el buffer... y si te pones a vaciar buffer vas a crear caos...
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
LA PAGINA NO ESTA FUNCIONANDO BIEN?
Sugerencias y dudas sobre el Foro
|
TigreDARK
|
5
|
2,978
|
10 Julio 2005, 06:40 am
por _R€d_
|
|
|
"return" no esta funcionando bien al devolver un iterador
Programación C/C++
|
Kasswed
|
1
|
2,475
|
9 Mayo 2012, 13:42 pm
por Kasswed
|
|
|
Parametro de funcion load() Ajax no ejecuta bien
PHP
|
Lupin
|
5
|
3,378
|
20 Abril 2013, 19:11 pm
por Lupin
|
|
|
[Pregunta]: Usar Long-Polling
Desarrollo Web
|
Leguim
|
0
|
1,691
|
27 Octubre 2019, 17:47 pm
por Leguim
|
|
|
[Pregunta]: Long Polling (Práctica)
Desarrollo Web
|
Leguim
|
1
|
2,246
|
27 Enero 2020, 22:27 pm
por @XSStringManolo
|
|