setInterval alternative

In my app I am polling the webserver for messages every second and displaying them in the frontend. I use setInterval to achieve this. However as long as the user stays on that page the client keeps polling the server with requests even if there is no data. The server does give an indication when no more messages are being generated by setting a variable. I thought of using this variable to clearInterval and stop the timer but that didn't work. What else can I use in this situation? I am using jquery and django. Here is my code:

jquery:
 var refresh = setInterval(
        function ()
            {
                var toLoad = '/myMonitor'+' #content';             
                $('#content').load(toLoad).show();

            }, 1000); // refresh every 1000 milliseconds
    });

html:
div id=content is here 

I can access the django variable for completion in html with each refresh. How can I set clearInterval if at all ?

Note: stack overflow does not let me put is &gt &lt so html is incomplete

Thanks

Updated 03/16/2010 I must be doing something wrong. But cannot figure it out. Here is my script with clearTimer and it does not work.


var timer = null;
$(function(){
        if ("{{status}}" == "False")
        {
           clearInterval(timer);
        }
        else
        {
            timer = setInterval(
                function(){
                    var toLoad = '/myMonitor'+' #content';  
                    $('#content').load(toLoad).show();} 
                    ,1000); // refresh every 1000 milliseconds
        }
    });

status is a boolean set in "views.py" (Django). Thanks a bunch.


A couple people have already answered with specific resources to your problem, so I thought I would provide a bit of background.

In short, you want the server to push data to the browser to avoid extensive client-side polling. There isn't a good cross-browser way to support server push, so a common solution that requires much less polling is to use the Comet (another cleaning product, like AJAX) long-poll technique.

With Comet, the browser makes a request, and the server keeps the connection open without responding until new data is available. When the server does has new data, it sends it over the open connection and the browser receives it right away. If the connection times out, the browser opens a new one. This lets the server send data to the client as soon as it becomes available. As others have indicated, this approach requires special configuration of your web server. You need a script on the server that checks for data at an interval and responds to the client if it exists.

Something to keep in mind with this approach is that most web servers are built to get a request from a client and respond as quickly as possible; they're not intended to be kept alive for a long period of time. With Comet you'll have far more open connections than normal, probably consuming more resources than you expect.


Your clearInterval check is only checking when the document ready event is fired.

If the code you gave is exactly what's in the browser, then you're comparing the string "{{status}}" to the string "False". I'd rather watch paint dry than wait for that to evaluate as true.

What if your requests taking longer than 1 second to complete? : You'll flood your server with requests.

function update () {
  $('#content').show().load('/myMonitor'+' #content', function (response, status) {
    if (!/* whatever you're trying to check*/) {
      setTimeout(update, 1000);
    };
  });
};

$(document).ready(function () {
  update();
});

Is closer than where you were, but you still need to work out how you're going to decide when you want to stop polling.

链接地址: http://www.djcxy.com/p/49636.html

上一篇: 如何暂时禁用滚动?

下一篇: setInterval替代