You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于jQuery实现类似Prototype的Ajax.PeriodicalUpdater并优化请求间隔

实现类似Prototype.js Ajax.PeriodicalUpdater的jQuery自适应延迟更新功能

嘿,我帮你重构了代码,完美实现你想要的功能——页面加载完成后立即请求目标内容,后续如果请求到的内容和之前一致,就自动增加下次请求的延迟(直到设定的最大延迟),一旦内容更新就立刻重置回初始请求频率,有效降低服务器负载:

<div id="div_a_updater" class="div_a_updater">Mettre ici</div>

<script>
function mettreajour_periodique(span_id, url_traitement, nos_parametres, our_frequency, our_decay, our_decay_to_reset) {
    jQuery(document).ready(function(){
        var target = jQuery("#"+span_id);
        var lastContent = '';
        var currentDelay = our_frequency;

        // 定义核心更新函数
        function updateContent() {
            jQuery.get(url_traitement + nos_parametres, function(newContent) {
                // 对比新旧内容
                if (newContent !== lastContent) {
                    // 内容有更新:替换内容,重置延迟
                    target.html(newContent);
                    lastContent = newContent;
                    currentDelay = our_frequency;
                } else {
                    // 内容无变化:增加延迟,但不超过设定的最大值
                    currentDelay += our_decay;
                    if (currentDelay > our_decay_to_reset * 1000) { // 转换秒为毫秒
                        currentDelay = our_decay_to_reset * 1000;
                    }
                }
                // 安排下一次请求
                setTimeout(updateContent, currentDelay);
            });
        }

        // 页面加载完成后立即执行第一次更新
        updateContent();
    });
}

// 调用函数:注意参数拼接格式
mettreajour_periodique('div_a_updater', 'brouillons_touse.php', '&membre=', 15000, 2000, 3600);
</script>

关键逻辑说明:

  • 替换setInterval为setTimeout:setInterval是固定间隔无法动态调整,setTimeout可以在每次请求完成后,根据内容变化情况灵活设置下一次的延迟时间
  • 内容对比机制:用lastContent变量存储上一次请求的内容,每次新请求完成后直接对比字符串,判断是否有更新
  • 自适应延迟规则:
    • 内容更新时:重置延迟为初始的our_frequency(15秒),确保及时获取最新内容
    • 内容无变化时:每次增加our_decay(2秒)的延迟,直到达到our_decay_to_reset(3600秒=1小时)的最大延迟,避免无意义的频繁请求
  • 初始立即执行:页面DOM就绪后直接调用updateContent(),实现加载完成即更新的需求

小提示:

如果你的nos_parametres参数需要更安全的传递方式,建议改用jQuery.get的参数对象形式,避免URL拼接的格式问题:

jQuery.get(url_traitement, { membre: '' }, function(newContent) {
    // 内部逻辑保持不变
});

内容的提问来源于stack exchange,提问作者Man Of God

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:32:40