Question

J'écris un système de messagerie push de base. Un petit changement a provoqué son arrêt correctement. Laisse-moi expliquer. Dans ma version originale, je pouvais mettre le code dans un document comme ceci:

<head>
  ...text/javascript">
  $(document).ready(function(){
    $(document).ajaxStop(check4Updates);
    check4Updates();
  });

  function check4Updates(){
    $.getJSON('%PATH%', callback);
  };
...
</head>

Cela fonctionnait bien et maintiendrait la connexion ouverte même si le serveur renvoyait la valeur null (ce qui après dire un délai d'attente de 2 minutes). Il continuerait simplement d'appeler indéfiniment la fonction getJSON. Panda heureux.

Maintenant, je dois mettre le segment de code entre les balises. L'accès à la fonction $ (document) .ready () ne fonctionnera pas.

<body>
...
check4Updates();
$("body").ajaxStop(check4Updates);
...
</body>

Cela fonctionne ... pendant un moment. Peu de temps après, il cessera d'appeler check4Updates, entrera dans une boucle infinie et utilisera 100% du temps processeur.

J'essaie de l'obtenir afin que check4Updates soit appelé à plusieurs reprises jusqu'à la fermeture de la page. Si quelqu'un a des idées sur les raisons pour lesquelles mon simple changement ne fonctionne plus comme prévu, VEUILLEZ me le faire savoir. Merci d'avoir pris le temps de lire et de m'aider.

Cordialement, Van Nguyen

Était-ce utile?

La solution

Oui, vous n'allez pas vouloir utiliser cette boucle, vous êtes plutôt DOSing sans parler du verrouillage du client.

Assez simple, créez un plugin d'interrogation:

Source: http://web.archive.org/web/20081227121015/http://buntin.org:80/2008/sep/23/jquery-polling-plugin/

Utilisation:

$("#chat").poll({
    url: "/chat/ajax/1/messages/",
    interval: 3000,
    type: "GET",
    success: function(data){
        $("#chat").append(data);
    }
});

Le code pour le sauvegarder:

(function($) {
    $.fn.poll = function(options){
        var $this = $(this);
        // extend our default options with those provided
        var opts = $.extend({}, $.fn.poll.defaults, options);
        setInterval(update, opts.interval);

        // method used to update element html
        function update(){
            $.ajax({
                type: opts.type,
                url: opts.url,
                success: opts.success
            });
        };
    };

    // default options
    $.fn.poll.defaults = {
        type: "POST",
        url: ".",
        success: '',
        interval: 2000
    };
})(jQuery);

Autres conseils

Utilisez un délai d'expiration, ces types de boucles sont une très mauvaise idée. Si vous devez utiliser l'interrogation pour quelque raison que ce soit, assurez-vous de ne pas foncer dans le dos.

Vous devez soit passer à une méthode d'interrogation comme décrit par altCognito, soit utiliser comet, conçue pour transmettre des données du serveur au client. Selon vos besoins, vous pouvez utiliser Jetty (pour Java), Twisted (Python) ou WebSync . (ASP.NET/IIS)

Je pense qu'il s'agit du serveur push?

Comment utiliser le Socket.IO?

Réf.: Présentation de Socket IO 0.9, groupe Google ( http://socket.io/ )

Réf.: http: // techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

Réf: Amusez-vous avec les websockets, Node.js et jQuery ( http://nayna.org/blog /? p = 159 )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top