jQuery - 如果关注浏览器选项卡,那么执行AJAX - 不工作

时间:2015-11-28 01:57:32

标签: javascript jquery ajax

我有一个代码,用于确定当前浏览器窗口或选项卡是否处于活动状态。如果它处于活动状态,则标签的标题显示为“活动”,如果不是,则表示“模糊”

工作正常。这是代码:

 $(window).on("blur focus", function (e) {
            var prevType = $(this).data("prevType");

            if (prevType != e.type) {   //  reduce double fire issues

                if (e.type == "blur") {
                    document.title = 'blurred';
                } else if (e.type = "focus") {
                  document.title = 'focus';
                }
            }

            $(this).data("prevType", e.type);
        })

上面的代码工作正常。

现在如果我向它添加AJAX,它就不起作用了。

 $(window).on("blur focus", function (e) {
            var prevType = $(this).data("prevType");

            if (prevType != e.type) {   //  reduce double fire issues

                if (e.type == "blur") {
                    document.title = 'blurred';
                } else if (e.type = "focus") {

                    var interval = function () {
                        $.ajax({
                            url: "<?php echo base_url('home/get') ?>",
                            cache: false,
                            success: function (html) {
                                $("#text").val(html);
                                document.title ='focus';
                            },
                        });
                    };


                    setInterval(interval, <?php echo $int ?>);
                }
            }

            $(this).data("prevType", e.type);
        })

如果它成为关注焦点,它会集中注意力。如果我失去焦点,它会说“模糊”不到一秒钟,然后再次关注。我不知道为什么。如果它不在焦点,我希望它说模糊。添加AJAX代码并不能使它工作。

请帮忙。感谢。

1 个答案:

答案 0 :(得分:4)

您需要在clearTimeout()活动中使用blur。我的代码不断轮询我的服务器以获取数据,但是当我离开页面时,它会停止轮询。请看下面的实现。我在我的应用程序here中完成了类似的操作:

$(window).blur(function() {
    clearTimeout(getJsonTmr);
    clearTimeout(updatePreviewTmr);
}).focus(StartTimers);

function StartTimers () {
    // Every half a second, 
    getJsonTmr = setInterval(function () {
        $.get("/doodles/update?getJson&DoodleID=" + DoodleOptions.DoodleID, function (data) {
            data = JSON.parse(data);
            if (!DoodleOptions.isActive)
                clearDoodleCanvas();
            $.each(data, function (index) {
                drawFromStream(data[index]);
            });
        });
    }, 500);

    updatePreviewTmr = setInterval(function () {
        $.post("/doodles/update?updatePreview", {
            "DoodleID": DoodleOptions.DoodleID,
            "DoodlePreview": canvas.toDataURL()
        });
    }, 5000);
}
StartTimers();

您可以使用上述代码作为参考并更改您的代码。

一个简单的参考实现...

function timers() {
  tmrAjax = setInterval(function () {
    $.get(/* ... */);
  }, 1000);
}

timers();

$(window).blur(function () {
  clearInterval(tmrAjax);
}).focus(timers);