javascript - AJAX 重新加载按钮有时会多次添加相同的消息

标签 javascript jquery ajax

我有一个 AJAX 函数来检查新消息,然后将新消息添加到 #message 中。但是,我的问题是这个函数每 20 秒触发一次,但是每当您单击立即触发该函数的刷新按钮时,它就会出错。这是我的 AJAX 函数:

function ajaxMail() {
    var message_id = $('.line:first').attr('id');
    jQuery.ajax({ //new mail
        type: 'get',
        dataType: 'text',
        url: "/employee/message/check_mail.php",
        data: {
            latest_id: message_id,
            t: Math.random()
        },
        success: function(data, textStatus) {
            $('#messages_inner').prepend(data);
        }
    });
}

function updateTitles() {
    //if(titleChange !== false) {
    $.get('update.php?type=title', function(data) {
        document.title = data;
    });
    //}
    $.get('update.php?type=header', function(data) {
        $('#heading').html(data);
    });
    $.get('update.php?type=total', function(data) {
        $('#total').html('Total messages: ' + data);
    });
    setTimeout("updateTitles();ajaxMail();", 20000);
}
updateTitles();

对于刷新按钮,这是我使用的:

$(document).ready(function() {
    $('#refresh').click(function() {
        ajaxMail();
        updateTitles();
    });
});

有时,由于按钮或其他原因,相同的确切消息会被添加到消息 div 的前面。 (但是当我刷新时,当然不再有 2 条相同的消息)这是同一消息被多次添加的一次:

enter image description here

首先,我按下了“刷新”按钮,它在新消息前面添加了内容。但是大约 5 秒后,函数再次触发,并且出于某种原因再次预先添加了相同的消息。同样如您所见,收件箱计数显示为 2,因为实际上只有 2 个(“Test”和“Test12345”),但出于某种原因,“Test12345”被添加了 2 次。

有谁知道它为什么这样做?如果您需要查看,我还可以提供 check_mail.php 的代码。

最佳答案

我建议也尝试使用 cache:false,我已经让浏览器缓存了一个 ajax 请求,即使我正在发送一个随机字符串。 此外,请考虑在再次设置超时之前清除超时,因为每次按下刷新按钮都会启动另一个超时。

关于javascript - AJAX 重新加载按钮有时会多次添加相同的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940695/

相关文章:

javascript - 提交被 preventDefault() 阻止

jquery - 转到页面重新加载上的特定选项卡或通过 AJAX 加载选项卡的超链接

javascript - 在 iOS 的 Safari 中向上滚动到最顶部会导致向上/向下滚动检测出现问题

javascript - 有没有办法使用函数参数的值来声明变量

javascript - 卸载/销毁 Angular 延迟加载组件

jquery - 为 AMX 命令按钮应用 CSS

javascript - 如何在 JavaScript 中验证输入?

javascript - Slick Carousel 无法初始化方法

javascript - Ajax投票系统投票显示

javascript - 如何执行从 Firebase 托管到 AWS Lambda 函数的跨源请求