AJAX - 只有在有新数据的情况下才能获得

时间:2015-11-28 03:50:40

标签: jquery ajax

现在,我每秒都在做一个GET请求,检查数据库中是否有新信息。

这使用了用户方面的大量资源。我有一个显示当前数据的文本框。如果数据库中有新数据,则将替换为新数据。现在,我每秒都要做一次GET请求来实现这一目标。

有更好的方法吗?

例如:我查看了检查窗口并观察了堆栈溢出。它没有做任何GET请求。但是,一旦有新评论,它就会根据新评论进行更新。我想要类似的东西。

我已经研究过Stackoverflow,并且没有找到对我正在制作的应用程序有帮助的那个。

我目前的代码:

function timers() {

            tmrAjax = setInterval(function () {

                $.get('<?php echo base_url('home/get') ?>',  function (html) {

                    $("[name=text]").attr('id', 'text');
                    $("#text").val(html);
                    //   $("#text").removeAttr("disabled");
                });
            }, 1000); //a call every second is ridiculous!
        }

        timers();

        $(window).blur(function () {
            clearInterval(tmrAjax);
            $("#text").removeAttr("id");
            //  $("#text").attr("disabled", "disabled");
        }).focus(timers);

1 个答案:

答案 0 :(得分:3)

StackOverflow网站和AngularJS中发生的概念称为WebSockets。传统的HTTP AJAX Long Polling可以通过这种方式与WebSockets进行比较:

http://apress.jensimmons.com/v5/pro-html5-programming/images/ch7/fig7-5.png

WebSockets与服务器有持久的连接。这意味着,服务器始终知道数据何时发生变化,并将数据推送到客户端,而不是客户端从服务器提取(请求)数据,这是传统方式。

正如您所看到的,WebSockets是相同的,但逐帧进行。他们拿块。只有大块数据被发送到客户端,从而节省了大量的时间和带宽: