首页 > 解决方案 > AJAX 重新加载间隔(轮询)帮助

问题描述

我有几个文件,我正在从中提取次要文本(最多一个单词),然后用另一个脚本对其进行样式化。

目前,它们按应有的方式加载和显示。但是,文本文件会随机更新,因此我希望重新加载它们,然后将后续脚本再次应用于它们。我尝试了不同的 setTimeout 和 setInterval 命令,但我认为问题在于我的放置或使用。经过几个小时的研究,我确定只是语法不合适。

这在本地运行,但通过一个像远程一样执行脚本的程序来拉取。(没有跨域问题)

这是一个示例片段,它提取文件并加载到后续脚本读取以显示的 html:

$(function follow_pull() {
        $.ajax({
            url : "most_recent_follower.txt",
            dataType: "text",
            success : function (data) {
                $("#follow").append(data).serialize();
            },
            setTimeout(fuction(){
                follow_pull()
            }, 10000);
        });
}); 

这是将这些文件加载​​到脚本中以显示的段:

$(window).ready(function ledload() {
var options = {
        pixelSize: 5, 
        stepDelay: 62, 
        horizontalPixelsCount:650,
        verticalPixelsCount:5,
        pixelRatio: 0.8,
        pathToPixelImage: 'ticker/pixel.png',
        backgroundColor: '#000',
        disabledPixelColor : '#020202',
        enabledPixelColor: '#ff522b'
    };
    $('.canvasld, .crl').leddisplay($.extend(options, {pixelSize: 3}));
        },
            setTimeout(fuction(){
                ledload()
            }, 10000););    

任何方向表示赞赏。如果需要,我可以发布整个文件,但我认为有人会得到我正在做的事情并且知道如何最好地指导我。

对于上下文,我正在使用一个脚本来获取文本,让它看起来像一个 LED 并像一个股票行情一样滚动。这被用于 Twitch 上的广播公司。

标签: javascriptjqueryajaxpollingajax-polling

解决方案


首先,我会ledload()退出$window.ready(). 这样,它可以通过它的名字来引用。另外,我很确定您不需要$(...)该函数的包装器follow_pull()...

function ledload() {
    var options = {
        pixelSize: 5, 
        stepDelay: 62, 
        horizontalPixelsCount:650,
        verticalPixelsCount:5,
        pixelRatio: 0.8,
        pathToPixelImage: 'ticker/pixel.png',
        backgroundColor: '#000',
        disabledPixelColor : '#020202',
        enabledPixelColor: '#ff522b'
    };
    $('.canvasld, .crl').leddisplay($.extend(options, {pixelSize: 3}));
}

function follow_pull() {    
    $.ajax({
        url : "most_recent_follower.txt",
        dataType: "text",
        success : function (data) {
            $("#follow").append(data).serialize();
            ledload();

            setTimeout(function(){
                follow_pull();
            }, 10000);
        }
    });
}; 

follow_pull()ledload()成功获取数据时调用。然后它会设置一个 10 秒的延迟,然后再重新开始。

如果您仍然想ledload在 上运行$(window).ready(),您也可以添加这一行:

$(window).ready(ledload);

PS我不明白.serialize()在做什么......这应该被传递到ledload()吗?


推荐阅读