elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  long polling ajax no esta funcionando bien
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: long polling ajax no esta funcionando bien  (Leído 4,492 veces)
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
long polling ajax no esta funcionando bien
« en: 25 Abril 2017, 01:24 am »

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 ,
Código
  1. $(function(doc, win, $) {
  2.    var has_focus = true;
  3.    var notification = win.Notification || win.mozNotification || win.webkitNotification;
  4.    var $badge = $("#notifications-badge");
  5.    var $list = $("#notifications-list");
  6.    var $button = $("#notifications-button");
  7.    URL_GET_NOTIFICATION = BASE_URL + 'notify/pusher';
  8.    URL_GET_NOTIFICATION_UPDATE = BASE_URL + 'notify/update';
  9.  
  10.    if ('undefined' === typeof notification) {
  11.        console.log('Web notification not supported');
  12.    } else {
  13.        notification.requestPermission(function(permission) {});
  14.    }
  15.  
  16.    function check_notifications(timestamp) {
  17.        $.ajax({
  18.            type: 'GET',
  19.            url: URL_GET_NOTIFICATION,
  20.            data: { timestamp : timestamp },
  21.            dataType: 'json',
  22.            async: true,
  23.            success: function (data) {
  24.                for (var i in data.notifications) {
  25.                    notify(data.notifications[i].message, data.notifications[i].type, data.notifications[i].timestamp);
  26.                }
  27.                check_notifications(data.timestamp);
  28.            }
  29.        });
  30.    }
  31.  
  32.     function notify(message, type, created_at) {
  33.        var type_txt = 'info';
  34.        var url = '#';
  35.        var icon = 'info-circle';
  36.  
  37.        if (type == 0) {
  38.            type_txt = 'success';
  39.            icon = 'check';
  40.        } else if (type == 1) {
  41.            type_txt = 'info';
  42.            icon = 'exclamation';
  43.        } else if (type == 2) {
  44.            type_txt = 'warning';
  45.            icon = 'exclamation-triangle';
  46.        } else if (type == 3 || type == 4) {
  47.            type_txt = 'danger';
  48.            icon = 'fire';
  49.        }
  50.  
  51.        $badge.show();
  52.        $badge.text(parseInt($badge.text()) + 1);
  53.  
  54.        $list.find(".item").eq(13).nextAll(".item").remove();
  55.        var item = '<li class="item text-' + type_txt + '"><a href="' + url + '"><span class="text-' + type_txt + '">' +
  56.            '<i class="fa fa-' + icon + ' fa-fw"></i> ' + message.substr(0, 22) + '</span>' +
  57.            '<span class="pull-right text-muted small" data-time="' + created_at + '">X</span></a></li>' +
  58.            '<li class="item divider"></li>';
  59.        $list.prepend(item);
  60.  
  61.        $('.dropdown.open .dropdown-toggle').dropdown('toggle');
  62.  
  63.        return true;
  64.    }
  65.  
  66.    $(win).on("blur", function () {
  67.        has_focus = false;
  68.    });
  69.  
  70.    $(win).on("focus", function () {
  71.        has_focus = true;
  72.    });
  73.  
  74.    $button.on("click", function () {
  75.        $badge.fadeOut(300, function () {
  76.            $badge.text(0);
  77.        });
  78.  
  79.        $list.find("span[data-time]").each(function (index) {
  80.            var $this = $(this);
  81.            $this.text(moment.unix($this.data('time')).fromNow());
  82.        });
  83.    });
  84.  
  85.    check_notifications();
  86. }(document, window, jQuery));
  87.  
  88. $('#notifications-button').on('click', function () {
  89.    $.ajax({
  90.        type: 'GET',
  91.        url: 'http://localhost/storelte/notify/update',
  92.        success: function(data){
  93.        }
  94.    });
  95. });


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #1 en: 25 Abril 2017, 01:32 am »

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 Desconectado

Mensajes: 178


Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #2 en: 25 Abril 2017, 01:36 am »

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
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #3 en: 25 Abril 2017, 01:43 am »

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.
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #4 en: 25 Abril 2017, 01:50 am »

asi se ve cuando queiro agregar un nuevo elemento queda igua si no recargo como arreglaria mi ajax https://drive.google.com/open?id=0B5jZAeoqf_UiVGJ5ZXk0UENucUE
« Última modificación: 25 Abril 2017, 01:53 am por geshiro » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #5 en: 25 Abril 2017, 01:57 am »

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 Desconectado

Mensajes: 178


Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #6 en: 25 Abril 2017, 01:59 am »

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

Código
  1. public function pusher(){
  2. $data = $this->session->userdata('log');
  3. $user_id = $data['id'];
  4. header('Content-Type: application/json');
  5. while (true) {
  6. $firstCall = false;
  7. if ($this->input->get('timestamp')) {
  8. $last_ajax_call = $this->input->get('timestamp');
  9. }else{
  10. $last_ajax_call = time();
  11.             $firstCall = true;
  12. }
  13.  
  14. $notificationsCount = $this->notification->checkForNotifications($user_id, $last_ajax_call);
  15. $newData = (int) $notificationsCount > 0 ? true : false;
  16. $notifications = [];
  17. if ($newData) {
  18. $dataSet = $this->notification->getNotifications($user_id, $last_ajax_call);
  19. foreach ($dataSet as $value) {
  20. $notifications[] = $value;
  21. $finalNotificationTime = $value['timestamp'];
  22. }
  23.  
  24. $result = array('notifications' => $notifications, 'timestamp' => $finalNotificationTime);
  25. $json = json_encode($result);
  26. echo $json;
  27. break;
  28. }else{
  29. if ($firstCall) {
  30. $dataSet = $this->notification->getUnreadNotifications($user_id);
  31. foreach ($dataSet as $value) {
  32. $notifications[] = $value;
  33. }
  34.  
  35. $result = array('notifications' => $notifications, 'timestamp' => $last_ajax_call);
  36. $json = json_encode($result);
  37. echo $json;
  38. break;
  39. }
  40.  
  41. sleep( 1 );
  42.            session_write_close();
  43.            continue;
  44. }
  45. }
  46. exit();
  47. }
« Última modificación: 25 Abril 2017, 02:06 am por geshiro » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #7 en: 25 Abril 2017, 02:17 am »

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 Desconectado

Mensajes: 178


Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #8 en: 25 Abril 2017, 02:27 am »

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

Código
  1. {"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
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: long polling ajax no esta funcionando bien
« Respuesta #9 en: 25 Abril 2017, 02:37 am »

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.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
LA PAGINA NO ESTA FUNCIONANDO BIEN?
Sugerencias y dudas sobre el Foro
TigreDARK 5 2,665 Último mensaje 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,239 Último mensaje 9 Mayo 2012, 13:42 pm
por Kasswed
Parametro de funcion load() Ajax no ejecuta bien
PHP
Lupin 5 3,125 Último mensaje 20 Abril 2013, 19:11 pm
por Lupin
[Pregunta]: Usar Long-Polling
Desarrollo Web
Leguim 0 1,484 Último mensaje 27 Octubre 2019, 17:47 pm
por Leguim
[Pregunta]: Long Polling (Práctica)
Desarrollo Web
Leguim 1 2,005 Último mensaje 27 Enero 2020, 22:27 pm
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines